home *** CD-ROM | disk | FTP | other *** search
/ Otherware / Otherware_1_SB_Development.iso / mac / misc / compsci / arcsgm.cpt / ARC SGML 1.0 / sgmlc / arcpcbrf.c < prev    next >
Encoding:
C/C++ Source or Header  |  1991-12-17  |  64.4 KB  |  1,274 lines

  1. #ifdef applec
  2. #pragma segment SegA
  3. #endif
  4. /******************************************************************************/
  5. /* Added PCBEAL for LINK and data attribute specification list endings. */
  6. /* #UNDEFs were added to avoid LINT warnings.  External names were shortened */
  7. /* to 7 characters for IBMC.  In 3 group parses, REFC was treated like a */
  8. /* name character in some states, rather than as an invalid character. */
  9. /******************************************************************************/
  10. /* ARCPCBRF: Parse tables for reference concrete syntax.
  11. */
  12. #include "entity.h"           /* Templates for entity control blocks. */
  13. #include "action.h"           /* Action names for all parsing. */
  14. #include "synxtrn.h"          /* Declarations for concrete syntax constants. */
  15. #include "adl.h"              /* Definitions for attribute list processing. */
  16. /******************************************************************************/
  17. /* PCBCONM: State and action table for content parse of mixed content.
  18.             Initial state assumes a start-tag was just processed.
  19. */
  20. /* Symbols for state names (end with a number). */
  21. #define ET0     0   /* Markup found or buffer flushed; no data. */
  22. #define DA0     2   /* Data in buffer. */
  23. #define DA1     4   /* Data and space in buffer. */
  24. #define ER0     6   /* ERO found; start lookahead buffer. */
  25. #define CR0     8   /* CRO found (ERO, RNI). */
  26. #define RS0    10   /* RS found; possible SR 3-6. */
  27. #define ME0    12   /* MSC found. */
  28. #define ME1    14   /* MSC, MSC found. */
  29. #define ES0    16   /* TAGO found; start lookahead buffer. */
  30. #define EE0    18   /* End-tag start (TAGO,ETI); move to lookahead buffer. */
  31. #define NE0    20   /* End-tag start (TAGO,NET); process NET if not end-tag. */
  32. #define MD0    22   /* MDO found (TAGO, MDO[2]). */
  33. #define MC0    24   /* MDO, COM found. */
  34. #define SC0    26   /* COM found; possible SR19-20. */
  35. #define SP0    28   /* Space found; data pending; possible SR7 or SR9. */
  36. #define SR0    30   /* SPCR found; possible SR7 or SR9. */
  37. #define TB0    32   /* TAB found; possible SR7 or SR9. */
  38.  
  39. int pcbcnet = ET0;            /* PCBCONM: markup found or data buffer flushed.*/
  40. int pcbcnda = DA0;            /* PCBCONM: data in buffer. */
  41.  
  42. static UNCH
  43. /*      free nu   nmc  nms  spc  non  ee   eob  rs   re   sep  cde  nsc  ero
  44.         nmre com  eti  net  lit  spcr mdo  msc  mso  pio  rni  tagc tago fce   */
  45. et0 []={DA0 ,DA0 ,DA0 ,DA0 ,SP0 ,ET0 ,ET0 ,ET0 ,RS0 ,ET0 ,TB0 ,DA0 ,DA0 ,ER0 ,
  46.         ET0 ,SC0 ,DA0 ,ET0 ,ET0 ,SR0 ,DA0 ,ME0 ,DA0 ,DA0 ,ET0 ,DA0 ,ES0 ,ET0 },/*et0*/
  47. et0a[]={DAS_,DAS_,DAS_,DAS_,DAS_,NON_,GET_,GET_,RSR_,SR2_,NOP_,DAS_,DAS_,LAS_,
  48.         REF_,NOP_,DAS_,NED_,SR10,NOP_,DAS_,LAS_,DAS_,DAS_,SR11,DAS_,LAS_,FCE_},
  49.  
  50. da0 []={DA0 ,DA0 ,DA0 ,DA0 ,DA1 ,ET0 ,ET0 ,ET0 ,ET0 ,ET0 ,ET0 ,DA0 ,DA0 ,ET0 ,
  51.         ET0 ,ET0 ,DA0 ,ET0 ,ET0 ,ET0 ,DA0 ,ET0 ,DA0 ,DA0 ,DA0 ,DA0 ,ET0 ,ET0 },/*da0*/
  52. da0a[]={NOP_,NOP_,NOP_,NOP_,NOP_,DAF_,DAF_,DAF_,DAF_,DAF_,DAF_,NOP_,NOP_,DAF_,
  53.         DAF_,DAF_,NOP_,DAF_,DAF_,DAF_,NOP_,DAF_,NOP_,NOP_,NOP_,NOP_,DAF_,DAF_},
  54.  
  55. da1 []={DA0 ,DA0 ,DA0 ,DA0 ,ET0 ,ET0 ,ET0 ,ET0 ,ET0 ,ET0 ,ET0 ,DA0 ,DA0 ,ET0 ,
  56.         ET0 ,ET0 ,DA0 ,ET0 ,ET0 ,ET0 ,DA0 ,ET0 ,DA0 ,DA0 ,DA0 ,DA0 ,ET0 ,ET0 },/*da1*/
  57. da1a[]={NOP_,NOP_,NOP_,NOP_,DAR_,DAF_,DAF_,DAF_,DAF_,DAR_,DAR_,NOP_,NOP_,DAF_,
  58.         DAF_,DAF_,NOP_,DAF_,DAF_,DAR_,NOP_,DAF_,NOP_,NOP_,NOP_,NOP_,DAF_,DAF_},
  59.  
  60. er0 []={ET0 ,ET0 ,ET0 ,ET0 ,ET0 ,ET0 ,ET0 ,ER0 ,ET0 ,ET0 ,ET0 ,ET0 ,ET0 ,ET0 ,
  61.         ET0 ,ET0 ,ET0 ,ET0 ,ET0 ,ET0 ,ET0 ,ET0 ,ET0 ,ET0 ,CR0 ,ET0 ,ET0 ,ET0 },/*er0*/
  62. er0a[]={LAF_,LAF_,LAF_,ER_ ,LAF_,LAF_,LAF_,GET_,LAF_,LAF_,LAF_,LAF_,LAF_,LAF_,
  63.         LAF_,LAF_,LAF_,LAF_,LAF_,LAF_,LAF_,LAF_,LAF_,LAF_,LAM_,LAF_,LAF_,LAF_},
  64.  
  65. /*      free nu   nmc  nms  spc  non  ee   eob  rs   re   sep  cde  nsc  ero
  66.         nmre com  eti  net  lit  spcr mdo  msc  mso  pio  rni  tagc tago fce   */
  67. cr0 []={ET0 ,ET0 ,ET0 ,ET0 ,ET0 ,ET0 ,ET0 ,CR0 ,ET0 ,ET0 ,ET0 ,ET0 ,ET0 ,ET0 ,
  68.         ET0 ,ET0 ,ET0 ,ET0 ,ET0 ,ET0 ,ET0 ,ET0 ,ET0 ,ET0 ,ET0 ,ET0 ,ET0 ,ET0 },/*cr0*/
  69. cr0a[]={NLF_,CRN_,NLF_,CRA_,NLF_,NLF_,NLF_,GET_,NLF_,NLF_,NLF_,NLF_,NLF_,NLF_,
  70.         NLF_,NLF_,NLF_,NLF_,NLF_,NLF_,NLF_,NLF_,NLF_,NLF_,NLF_,NLF_,NLF_,NLF_},
  71.  
  72. rs0 []={ET0 ,ET0 ,ET0 ,ET0 ,ET0 ,ET0 ,ET0 ,RS0 ,ET0 ,ET0 ,ET0 ,ET0 ,ET0 ,ET0 ,
  73.         ET0 ,ET0 ,ET0 ,ET0 ,ET0 ,ET0 ,ET0 ,ET0 ,ET0 ,ET0 ,ET0 ,ET0 ,ET0 ,ET0 },/*rs0*/
  74. rs0a[]={SR3_,SR3_,SR3_,SR3_,SR4_,SR3_,SR3_,GET_,SR3_,SR5_,SR4_,SR3_,SR3_,SR3_,
  75.         SR3_,SR3_,SR3_,NED_,SR3_,SR4_,SR3_,SR3_,SR3_,SR3_,SR3_,SR3_,SR3_,SR3_},
  76.  
  77. me0 []={ET0, ET0, ET0, ET0, ET0 ,ET0, ET0, ME0, ET0 ,ET0 ,ET0 ,ET0, ET0, ET0,
  78.         ET0 ,ET0 ,ET0 ,ET0, ET0, ET0, ET0, ME1 ,ET0, ET0, ET0 ,ET0, ET0, ET0 },/*me0*/
  79. me0a[]={LAF_,LAF_,LAF_,LAF_,LAF_,LAF_,LAF_,GET_,LAF_,LAF_,LAF_,LAF_,LAF_,LAF_,
  80.         LAF_,LAF_,LAF_,LAF_,LAF_,LAF_,LAF_,LAM_,LAF_,LAF_,LAF_,LAF_,LAF_,LAF_},
  81.  
  82. me1 []={ET0, ET0, ET0, ET0, ET0 ,ET0, ET0, ME1, ET0 ,ET0 ,ET0 ,ET0, ET0, ET0,
  83.         ET0 ,ET0 ,ET0 ,ET0, ET0, ET0, ET0, ET0 ,ET0, ET0, ET0 ,ET0, ET0, ET0 },/*me1*/
  84. me1a[]={LAF_,LAF_,LAF_,LAF_,LAF_,LAF_,LAF_,GET_,LAF_,LAF_,LAF_,LAF_,LAF_,LAF_,
  85.         LAF_,LAF_,LAF_,LAF_,LAF_,LAF_,LAF_,LAF_,LAF_,LAF_,LAF_,MSE_,LAF_,LAF_},
  86.  
  87. /*      free nu   nmc  nms  spc  non  ee   eob  rs   re   sep  cde  nsc  ero
  88.         nmre com  eti  net  lit  spcr mdo  msc  mso  pio  rni  tagc tago fce   */
  89. es0 []={ET0 ,ET0 ,ET0 ,ET0 ,ET0 ,ET0 ,ET0 ,ES0 ,ET0 ,ET0 ,ET0 ,ET0 ,ET0 ,ET0 ,
  90.         ET0 ,ET0 ,EE0 ,NE0 ,ET0 ,ET0 ,MD0 ,ET0 ,ET0 ,ET0 ,ET0 ,ET0 ,ET0 ,ET0 },/*es0*/
  91. es0a[]={LAF_,LAF_,LAF_,STG_,LAF_,LAF_,LAF_,GET_,LAF_,LAF_,LAF_,LAF_,LAF_,LAF_,
  92.         LAF_,LAF_,LAM_,LAM_,LAF_,LAF_,LAM_,LAF_,LAF_,PIS_,LAF_,NST_,LAF_,LAF_},
  93.  
  94. ee0 []={ET0 ,ET0 ,ET0 ,ET0 ,ET0 ,ET0 ,ET0 ,EE0 ,ET0 ,ET0 ,ET0 ,ET0 ,ET0 ,ET0 ,
  95.         ET0 ,ET0 ,ET0 ,ET0 ,ET0 ,ET0 ,ET0 ,ET0 ,ET0 ,ET0 ,ET0 ,ET0 ,ET0 ,ET0 },/*ee0*/
  96. ee0a[]={LAF_,LAF_,LAF_,ETG_,LAF_,LAF_,LAF_,GET_,LAF_,LAF_,LAF_,LAF_,LAF_,LAF_,
  97.         LAF_,LAF_,LAF_,LAF_,LAF_,LAF_,LAF_,LAF_,LAF_,LAF_,LAF_,NET_,LAF_,LAF_},
  98.  
  99. ne0 []={ET0 ,ET0 ,ET0 ,ET0 ,ET0 ,ET0 ,ET0 ,NE0 ,ET0 ,ET0 ,ET0 ,ET0 ,ET0 ,ET0 ,
  100.         ET0 ,ET0 ,ET0 ,ET0 ,ET0 ,ET0 ,ET0 ,ET0 ,ET0 ,ET0 ,ET0 ,ET0 ,ET0 ,ET0 },/*ne0*/
  101. ne0a[]={NLF_,NLF_,NLF_,ETG_,NLF_,NLF_,NLF_,GET_,NLF_,NLF_,NLF_,NLF_,NLF_,NLF_,
  102.         NLF_,NLF_,NLF_,NLF_,NLF_,NLF_,NLF_,NLF_,NLF_,NLF_,NLF_,NET_,NLF_,NLF_},
  103.  
  104. /*      free nu   nmc  nms  spc  non  ee   eob  rs   re   sep  cde  nsc  ero
  105.         nmre com  eti  net  lit  spcr mdo  msc  mso  pio  rni  tagc tago fce   */
  106. md0 []={ET0, ET0, ET0, ET0, ET0 ,ET0, ET0, MD0, ET0 ,ET0 ,ET0 ,ET0, ET0, ET0,
  107.         ET0 ,MC0 ,ET0 ,ET0, ET0, ET0, ET0, ET0 ,ET0, ET0, ET0 ,ET0, ET0, ET0 },/*md0*/
  108. md0a[]={LAF_,LAF_,LAF_,MD_ ,LAF_,LAF_,LAF_,GET_,LAF_,LAF_,LAF_,LAF_,LAF_,LAF_,
  109.         LAF_,LAM_,LAF_,LAF_,LAF_,LAF_,LAF_,LAF_,MSS_,LAF_,LAF_,MDC_,LAF_,LAF_},
  110.  
  111. mc0 []={ET0, ET0, ET0, ET0, ET0, ET0 ,ET0, MC0, ET0 ,ET0, ET0 ,ET0, ET0, ET0,
  112.         ET0 ,ET0 ,ET0 ,ET0, ET0, ET0, ET0, ET0 ,ET0 ,ET0 ,ET0 ,ET0, ET0, ET0 },/*mc0*/
  113. mc0a[]={NLF_,NLF_,NLF_,NLF_,NLF_,NLF_,NLF_,GET_,NLF_,NLF_,NLF_,NLF_,NLF_,NLF_,
  114.         NLF_,MDC_,NLF_,NLF_,NLF_,NLF_,NLF_,NLF_,NLF_,NLF_,NLF_,NLF_,NLF_,NLF_},
  115.  
  116. sc0 []={ET0, ET0, ET0, ET0, ET0, ET0 ,ET0, SC0, ET0 ,ET0, ET0 ,ET0, ET0, ET0,
  117.         ET0 ,ET0 ,ET0 ,ET0, ET0, ET0, ET0, ET0 ,ET0 ,ET0 ,ET0 ,ET0, ET0, ET0 },/*sc0*/
  118. sc0a[]={SR19,SR19,SR19,SR19,SR19,SR19,SR19,GET_,SR19,SR19,SR19,SR19,SR19,SR19,
  119.         SR19,SR20,SR19,SR19,SR19,SR19,SR19,SR19,SR19,SR19,SR19,SR19,SR19,SR19},
  120.  
  121. /*      free nu   nmc  nms  spc  non  ee   eob  rs   re   sep  cde  nsc  ero
  122.         nmre com  eti  net  lit  spcr mdo  msc  mso  pio  rni  tagc tago fce   */
  123. sp0 []={DA0 ,DA0 ,DA0 ,DA0 ,ET0 ,ET0 ,ET0 ,ET0 ,ET0 ,ET0 ,ET0 ,DA0 ,DA0 ,ET0 ,
  124.         ET0 ,ET0 ,DA0 ,ET0 ,ET0 ,ET0 ,DA0 ,ET0 ,DA0 ,DA0 ,DA0 ,DA0 ,ET0 ,ET0 },/*sp0*/
  125. sp0a[]={NOP_,NOP_,NOP_,NOP_,SR9_,DAF_,DAF_,GTR_,DAF_,SR7_,SR9_,NOP_,NOP_,DAF_,
  126.         DAF_,DAF_,NOP_,DAF_,DAF_,SR9_,NOP_,DAF_,NOP_,NOP_,NOP_,NOP_,DAF_,DAF_},
  127.  
  128. sr0 []={ET0 ,ET0 ,ET0 ,ET0 ,ET0 ,ET0 ,ET0 ,SR0 ,ET0 ,ET0 ,ET0 ,ET0 ,ET0 ,ET0 ,
  129.         ET0 ,ET0 ,ET0 ,ET0 ,ET0 ,ET0 ,ET0 ,ET0 ,ET0 ,ET0 ,ET0 ,ET0 ,ET0 ,ET0 },/*sr0*/
  130. sr0a[]={SR8_,SR8_,SR8_,SR8_,SR9_,SR8_,SR8_,GET_,SR8_,SR7_,SR9_,SR8_,SR8_,SR8_,
  131.         SR8_,SR8_,SR8_,SR8_,SR8_,SR9_,SR8_,SR8_,SR8_,SR8_,SR8_,SR8_,SR8_,SR8_},
  132.  
  133. tb0 []={ET0 ,ET0 ,ET0 ,ET0 ,ET0 ,ET0 ,ET0 ,TB0 ,ET0 ,ET0 ,ET0 ,ET0 ,ET0 ,ET0 ,
  134.         ET0 ,ET0 ,ET0 ,ET0 ,ET0 ,ET0 ,ET0 ,ET0 ,ET0 ,ET0 ,ET0 ,ET0 ,ET0 ,ET0 },/*tb0*/
  135. tb0a[]={SR1_,SR1_,SR1_,SR1_,SR9_,SR1_,SR1_,GET_,SR1_,SR7_,SR9_,SR1_,SR1_,SR1_,
  136.         SR1_,SR1_,SR1_,SR1_,SR1_,SR9_,SR1_,SR1_,SR1_,SR1_,SR1_,SR1_,SR1_,SR1_},
  137.  
  138. *conmtab[] = {et0, et0a, da0, da0a, da1, da1a, er0, er0a, cr0, cr0a, rs0, rs0a,
  139.               me0, me0a, me1, me1a, es0, es0a, ee0, ee0a, ne0, ne0a, md0, md0a,
  140.               mc0, mc0a, sc0, sc0a, sp0, sp0a, sr0, sr0a, tb0, tb0a  };
  141. struct parse pcbconm = {(UNCH *)"CONM", lexcnm, conmtab, 0, 0, 0, 0};
  142. #undef ET0
  143. #undef DA0
  144. #undef DA1
  145. #undef ER0
  146. #undef CR0
  147. #undef RS0
  148. #undef ME0
  149. #undef ME1
  150. #undef ES0
  151. #undef EE0
  152. #undef NE0
  153. #undef MD0
  154. #undef MC0
  155. #undef SC0
  156. #undef SP0
  157. #undef SR0
  158. #undef TB0
  159. /******************************************************************************/
  160. /* PCBCONE: State and action table for content parse of element content.
  161.             Initial state assumes a start-tag was just processed.
  162. */
  163. /* Symbols for state names (end with a number). */
  164. #define ET2     0   /* Markup found. */
  165. #define ER2     2   /* ERO found; start lookahead buffer. */
  166. #define CR2     4   /* CRO found (ERO, RNI). */
  167. #define RS2     6   /* RS found; possible SR 3-6 if they were declared. */
  168. #define ME2     8   /* MSC found. */
  169. #define ME3    10   /* MSC, MSC found. */
  170. #define ES2    12   /* TAGO found; start lookahead buffer. */
  171. #define EE2    14   /* End-tag start (TAGO,ETI); move to lookahead buffer. */
  172. #define NE2    16   /* End-tag start (TAGO,NET); process NET if not end-tag. */
  173. #define MD2    18   /* MDO found (TAGO, MDO[2]). */
  174. #define MC2    20   /* MDO, COM found. */
  175. #define SC2    22   /* COM found; possible SR19-20 if they were mapped. */
  176. #define SP2    24   /* Space found; possible SR7 or SR9. */
  177. #define SR2    26   /* SPCR found; possible SR7 or SR9. */
  178. #define TB2    28   /* TAB found; possible SR7 or SR9. */
  179.  
  180. static UNCH
  181. /*      free nu   nmc  nms  spc  non  ee   eob  rs   re   sep  cde  nsc  ero
  182.         nmre com  eti  net  lit  spcr mdo  msc  mso  pio  rni  tagc tago fce   */
  183. et2 []={ET2 ,ET2 ,ET2 ,ET2 ,SP2 ,ET2 ,ET2 ,ET2 ,RS2 ,ET2 ,TB2 ,ET2 ,ET2 ,ER2 ,
  184.         ET2 ,SC2 ,ET2 ,ET2 ,ET2 ,SR2 ,ET2 ,ME2 ,ET2 ,ET2 ,ET2 ,ET2 ,ES2 ,ET2 },/*et2*/
  185. et2a[]={DCE_,DCE_,DCE_,DCE_,NOP_,DCE_,GET_,GET_,RS_ ,SR2_,NOP_,DCE_,DCE_,LAS_,
  186.         NOP_,NOP_,DCE_,NED_,SR10,NOP_,DCE_,LAS_,DCE_,DCE_,SR11,DCE_,LAS_,DCE_},
  187.  
  188. er2 []={ET2 ,ET2 ,ET2 ,ET2 ,ET2 ,ET2 ,ET2 ,ER2 ,ET2 ,ET2 ,ET2 ,ET2 ,ET2 ,ET2 ,
  189.         ET2 ,ET2 ,ET2 ,ET2 ,ET2 ,ET2 ,ET2 ,ET2 ,ET2 ,ET2 ,CR2 ,ET2 ,ET2 ,ET2 },/*er2*/
  190. er2a[]={LAF_,LAF_,LAF_,ER_ ,LAF_,LAF_,LAF_,GET_,LAF_,LAF_,LAF_,LAF_,LAF_,LAF_,
  191.         LAF_,LAF_,LAF_,LAF_,LAF_,LAF_,LAF_,LAF_,LAF_,LAF_,LAM_,LAF_,LAF_,LAF_},
  192.  
  193. cr2 []={ET2 ,ET2 ,ET2 ,ET2 ,ET2 ,ET2 ,ET2 ,CR2 ,ET2 ,ET2 ,ET2 ,ET2 ,ET2 ,ET2 ,
  194.         ET2 ,ET2 ,ET2 ,ET2 ,ET2 ,ET2 ,ET2 ,ET2 ,ET2 ,ET2 ,ET2 ,ET2 ,ET2 ,ET2 },/*cr2*/
  195. cr2a[]={NLF_,CRN_,NLF_,CRA_,NLF_,NLF_,NLF_,GET_,NLF_,NLF_,NLF_,NLF_,NLF_,NLF_,
  196.         NLF_,NLF_,NLF_,NLF_,NLF_,NLF_,NLF_,NLF_,NLF_,NLF_,NLF_,NLF_,NLF_,NLF_},
  197.  
  198. rs2 []={ET2 ,ET2 ,ET2 ,ET2 ,ET2 ,ET2 ,ET2 ,RS2 ,ET2 ,ET2 ,ET2 ,ET2 ,ET2 ,ET2 ,
  199.         ET2 ,ET2 ,ET2 ,ET2 ,ET2 ,ET2 ,ET2 ,ET2 ,ET2 ,ET2 ,ET2 ,ET2 ,ET2 ,ET2 },/*rs2*/
  200. rs2a[]={SR3_,SR3_,SR3_,SR3_,SR4_,SR3_,SR3_,GET_,SR3_,SR5_,SR4_,SR3_,SR3_,SR3_,
  201.         SR3_,SR3_,SR3_,NED_,SR3_,SR4_,SR3_,SR3_,SR3_,SR3_,SR3_,SR3_,SR3_,SR3_},
  202.  
  203. /*      free nu   nmc  nms  spc  non  ee   eob  rs   re   sep  cde  nsc  ero
  204.         nmre com  eti  net  lit  spcr mdo  msc  mso  pio  rni  tagc tago fce   */
  205. me2 []={ET2, ET2, ET2, ET2, ET2 ,ET2, ET2, ME2, ET2 ,ET2 ,ET2 ,ET2, ET2, ET2,
  206.         ET2 ,ET2, ET2 ,ET2, ET2, ET2, ET2, ME3 ,ET2, ET2, ET2 ,ET2, ET2, ET2 },/*me2*/
  207. me2a[]={LAF_,LAF_,LAF_,LAF_,LAF_,LAF_,LAF_,GET_,LAF_,LAF_,LAF_,LAF_,LAF_,LAF_,
  208.         LAF_,LAF_,LAF_,LAF_,LAF_,LAF_,LAF_,LAM_,LAF_,LAF_,LAF_,LAF_,LAF_,LAF_},
  209.  
  210. me3 []={ET2, ET2, ET2, ET2, ET2 ,ET2, ET2, ME3, ET2 ,ET2 ,ET2 ,ET2, ET2, ET2,
  211.         ET2 ,ET2, ET2 ,ET2, ET2, ET2, ET2, ET2 ,ET2, ET2, ET2 ,ET2, ET2, ET2 },/*me3*/
  212. me3a[]={LAF_,LAF_,LAF_,LAF_,LAF_,LAF_,LAF_,GET_,LAF_,LAF_,LAF_,LAF_,LAF_,LAF_,
  213.         LAF_,LAF_,LAF_,LAF_,LAF_,LAF_,LAF_,LAF_,LAF_,LAF_,LAF_,MSE_,LAF_,LAF_},
  214.  
  215. es2 []={ET2 ,ET2 ,ET2 ,ET2 ,ET2 ,ET2 ,ET2 ,ES2 ,ET2 ,ET2 ,ET2 ,ET2 ,ET2 ,ET2 ,
  216.         ET2 ,ET2 ,EE2 ,NE2 ,ET2 ,ET2 ,MD2 ,ET2 ,ET2 ,ET2 ,ET2 ,ET2 ,ET2 ,ET2 },/*es2*/
  217. es2a[]={LAF_,LAF_,LAF_,STG_,LAF_,LAF_,LAF_,GET_,LAF_,LAF_,LAF_,LAF_,LAF_,LAF_,
  218.         LAF_,LAF_,LAM_,LAM_,LAF_,LAF_,LAM_,LAF_,LAF_,PIS_,LAF_,NST_,LAF_,LAF_},
  219.  
  220. ee2 []={ET2 ,ET2 ,ET2 ,ET2 ,ET2 ,ET2 ,ET2 ,EE2 ,ET2 ,ET2 ,ET2 ,ET2 ,ET2 ,ET2 ,
  221.         ET2 ,ET2 ,ET2 ,ET2 ,ET2 ,ET2 ,ET2 ,ET2 ,ET2 ,ET2 ,ET2 ,ET2 ,ET2 ,ET2 },/*ee2*/
  222. ee2a[]={LAF_,LAF_,LAF_,ETG_,LAF_,LAF_,LAF_,GET_,LAF_,LAF_,LAF_,LAF_,LAF_,LAF_,
  223.         LAF_,LAF_,LAF_,LAF_,LAF_,LAF_,LAF_,LAF_,LAF_,LAF_,LAF_,NET_,LAF_,LAF_},
  224.  
  225. /*      free nu   nmc  nms  spc  non  ee   eob  rs   re   sep  cde  nsc  ero
  226.         nmre com  eti  net  lit  spc  mdo  msc  mso  pio  rni  tagc tago fce   */
  227. ne2 []={ET2 ,ET2 ,ET2 ,ET2 ,ET2 ,ET2 ,ET2 ,NE2 ,ET2 ,ET2 ,ET2 ,ET2 ,ET2 ,ET2 ,
  228.         ET2 ,ET2 ,ET2 ,ET2 ,ET2 ,ET2 ,ET2 ,ET2 ,ET2 ,ET2 ,ET2 ,ET2 ,ET2 ,ET2 },/*ne2*/
  229. ne2a[]={NLF_,NLF_,NLF_,ETG_,NLF_,NLF_,NLF_,GET_,NLF_,NLF_,NLF_,NLF_,NLF_,NLF_,
  230.         NLF_,NLF_,NLF_,NLF_,NLF_,NLF_,NLF_,NLF_,NLF_,NLF_,NLF_,NET_,NLF_,NLF_},
  231.  
  232. md2 []={ET2, ET2, ET2, ET2, ET2 ,ET2, ET2, MD2, ET2 ,ET2 ,ET2 ,ET2, ET2, ET2,
  233.         ET2 ,MC2, ET2 ,ET2, ET2, ET2, ET2, ET2 ,ET2, ET2, ET2 ,ET2, ET2, ET2 },/*md2*/
  234. md2a[]={LAF_,LAF_,LAF_,MD_ ,LAF_,LAF_,LAF_,GET_,LAF_,LAF_,LAF_,LAF_,LAF_,LAF_,
  235.         LAF_,LAM_,LAF_,LAF_,LAF_,LAF_,LAF_,LAF_,MSS_,LAF_,LAF_,MDC_,LAF_,LAF_},
  236.  
  237. mc2 []={ET2, ET2, ET2, ET2, ET2, ET2 ,ET2, MC2, ET2 ,ET2, ET2 ,ET2, ET2, ET2,
  238.         ET2 ,ET2, ET2 ,ET2, ET2, ET2, ET2, ET2 ,ET2 ,ET2 ,ET2 ,ET2, ET2, ET2 },/*mc2*/
  239. mc2a[]={NLF_,NLF_,NLF_,NLF_,NLF_,NLF_,NLF_,GET_,NLF_,NLF_,NLF_,NLF_,NLF_,NLF_,
  240.         NLF_,MDC_,NLF_,NLF_,NLF_,NLF_,NLF_,NLF_,NLF_,NLF_,NLF_,NLF_,NLF_,NLF_},
  241.  
  242. sc2 []={ET2, ET2, ET2, ET2, ET2, ET2 ,ET2, SC2, ET2 ,ET2, ET2 ,ET2, ET2, ET2,
  243.         ET2 ,ET2 ,ET2 ,ET2, ET2, ET2, ET2, ET2 ,ET2 ,ET2 ,ET2 ,ET2, ET2, ET2 },/*sc2*/
  244. sc2a[]={SR19,SR19,SR19,SR19,SR19,SR19,SR19,GET_,SR19,SR19,SR19,SR19,SR19,SR19,
  245.         SR19,SR20,SR19,SR19,SR19,SR19,SR19,SR19,SR19,SR19,SR19,SR19,SR19,SR19},
  246.  
  247. /*      free nu   nmc  nms  spc  non  ee   eob  rs   re   sep  cde  nsc  ero
  248.         nmre com  eti  net  lit  spc  mdo  msc  mso  pio  rni  tagc tago fce   */
  249. sp2 []={ET2 ,ET2 ,ET2 ,ET2 ,ET2 ,ET2 ,ET2 ,SP2 ,RS2 ,ET2 ,ET2 ,ET2 ,ET2 ,ER2 ,
  250.         ET2 ,SC2 ,ET2 ,ET2 ,ET2 ,ET2 ,ET2 ,ME2 ,ET2 ,ET2 ,ET2 ,ET2 ,ES2 ,ET2 },/*sp2*/
  251. sp2a[]={DCE_,DCE_,DCE_,DCE_,SR9_,DCE_,GET_,GET_,RS_ ,SR7_,SR9_,DCE_,DCE_,LAS_,
  252.         NOP_,NOP_,DCE_,NED_,SR10,SR9_,DCE_,LAS_,DCE_,DCE_,SR11,DCE_,LAS_,DCE_},
  253.  
  254. sr2 []={ET2 ,ET2 ,ET2 ,ET2 ,ET2 ,ET2 ,ET2 ,SR2 ,ET2 ,ET2 ,ET2 ,ET2 ,ET2 ,ET2 ,
  255.         ET2 ,ET2 ,ET2 ,ET2 ,ET2 ,ET2 ,ET2 ,ET2 ,ET2 ,ET2 ,ET2 ,ET2 ,ET2 ,ET2 },/*sr2*/
  256. sr2a[]={SR8_,SR8_,SR8_,SR8_,SR9_,SR8_,SR8_,GET_,SR8_,SR7_,SR9_,SR8_,SR8_,SR8_,
  257.         SR8_,SR8_,SR8_,SR8_,SR8_,SR9_,SR8_,SR8_,SR8_,SR8_,SR8_,SR8_,SR8_,SR8_},
  258.  
  259. tb2 []={ET2 ,ET2 ,ET2 ,ET2 ,ET2 ,ET2 ,ET2 ,TB2 ,ET2 ,ET2 ,ET2 ,ET2 ,ET2 ,ET2 ,
  260.         ET2 ,ET2 ,ET2 ,ET2 ,ET2 ,ET2 ,ET2 ,ET2 ,ET2 ,ET2 ,ET2 ,ET2 ,ET2 ,ET2 },/*tb2*/
  261. tb2a[]={SR1_,SR1_,SR1_,SR1_,SR9_,SR1_,SR1_,GET_,SR1_,SR7_,SR9_,SR1_,SR1_,SR1_,
  262.         SR1_,SR1_,SR1_,SR1_,SR1_,SR9_,SR1_,SR1_,SR1_,SR1_,SR1_,SR1_,SR1_,SR1_},
  263.  
  264. *conetab[] = {et2, et2a, er2, er2a, cr2, cr2a, rs2, rs2a, me2, me2a, me3, me3a,
  265.               es2, es2a, ee2, ee2a, ne2, ne2a, md2, md2a, mc2, mc2a, sc2, sc2a,
  266.               sp2, sp2a, sr2, sr2a, tb2, tb2a  };
  267. struct parse pcbcone = {(UNCH *)"CONE", lexcnm, conetab, 0, 0, 0, 0};
  268. #undef ET2
  269. #undef ER2
  270. #undef CR2
  271. #undef RS2
  272. #undef ME2
  273. #undef ME3
  274. #undef ES2
  275. #undef EE2
  276. #undef NE2
  277. #undef MD2
  278. #undef MC2
  279. #undef SC2
  280. #undef SP2
  281. #undef SR2
  282. #undef TB2
  283. /******************************************************************************/
  284. /* PCBCONR: State and action table for content parse of replaceable character
  285.             data.  Initial state assumes a start-tag was just processed.
  286.             Only entity references and character references are recognized.
  287. */
  288. /* Symbols for state names (end with a number). */
  289. #define ET4     0   /* Markup found or buffer flushed; no data. */
  290. #define DA4     2   /* Data in buffer. */
  291. #define ER4     4   /* ERO found; start lookahead buffer. */
  292. #define CR4     6   /* CRO found (ER2, RNI). */
  293. #define ES4     8   /* TAGO found; start lookahead buffer. */
  294. #define EE4    10   /* End-tag start (TAGO,ETI); move to lookahead buffer. */
  295. #define NE4    12   /* End-tag start (TAGO,NET); process NET if not end-tag. */
  296.  
  297. static UNCH
  298. /*      free nu   nmc  nms  spc  non  ee   eob  rs   re   sep  cde  nsc  ero
  299.         nmre com  eti  net  mdo  msc  mso  pero pio  rni  tagc tago  */
  300. et4 []={DA4 ,DA4 ,DA4 ,DA4 ,DA4 ,ET4 ,ET4 ,ET4 ,ET4 ,ET4 ,DA4 ,DA4 ,DA4 ,ER4 ,
  301.         ET4 ,DA4 ,DA4 ,ET4 ,DA4 ,DA4 ,DA4 ,DA4 ,DA4 ,DA4 ,DA4 ,ES4 },/*et4*/
  302. et4a[]={DAS_,DAS_,DAS_,DAS_,DAS_,NON_,EE_ ,GET_,RS_ ,REF_,DAS_,DAS_,DAS_,LAS_,
  303.         REF_,DAS_,DAS_,NED_,DAS_,DAS_,DAS_,DAS_,DAS_,DAS_,DAS_,LAS_},
  304.  
  305. da4 []={DA4 ,DA4 ,DA4 ,DA4 ,DA4 ,ET4 ,ET4 ,ET4 ,ET4 ,ET4 ,DA4 ,DA4 ,DA4 ,ET4 ,
  306.         ET4 ,DA4 ,DA4 ,ET4 ,DA4 ,DA4 ,DA4 ,DA4 ,DA4 ,DA4 ,DA4 ,ET4 },/*da4*/
  307. da4a[]={NOP_,NOP_,NOP_,NOP_,NOP_,DAF_,DAF_,DAF_,DAF_,DAF_,NOP_,NOP_,NOP_,DAF_,
  308.         DAF_,NOP_,NOP_,DAF_,NOP_,NOP_,NOP_,NOP_,NOP_,NOP_,NOP_,DAF_},
  309.  
  310. er4 []={ET4 ,ET4 ,ET4 ,ET4 ,ET4 ,ET4 ,ET4 ,ER4 ,ET4 ,ET4 ,ET4 ,ET4 ,ET4 ,ET4 ,
  311.         ET4 ,ET4 ,ET4 ,ET4 ,ET4 ,ET4 ,ET4 ,ET4 ,ET4 ,CR4 ,ET4 ,ET4 },/*er4*/
  312. er4a[]={LAF_,LAF_,LAF_,ERX_,LAF_,LAF_,LAF_,GET_,LAF_,LAF_,LAF_,LAF_,LAF_,LAF_,
  313.         LAF_,LAF_,LAF_,LAF_,LAF_,LAF_,LAF_,LAF_,LAF_,LAM_,LAF_,LAF_},
  314.  
  315. cr4 []={ET4 ,ET4 ,ET4 ,ET4 ,ET4 ,ET4 ,ET4 ,CR4 ,ET4 ,ET4 ,ET4 ,ET4 ,ET4 ,ET4 ,
  316.         ET4 ,ET4 ,ET4 ,ET4 ,ET4 ,ET4 ,ET4 ,ET4 ,ET4 ,ET4 ,ET4 ,ET4 },/*cr4*/
  317. cr4a[]={LAF_,CRN_,LAF_,CRA_,LAF_,LAF_,LAF_,GET_,LAF_,LAF_,LAF_,LAF_,LAF_,LAF_,
  318.         LAF_,LAF_,LAF_,LAF_,LAF_,LAF_,LAF_,LAF_,LAF_,LAF_,LAF_,LAF_},
  319.  
  320. /*      free nu   nmc  nms  spc  non  ee   eob  rs   re   sep  cde  nsc  ero
  321.         nmre com  eti  net  mdo  msc  mso  pero pio  rni  tagc tago  */
  322. es4 []={ET4 ,ET4 ,ET4 ,ET4 ,ET4 ,ET4 ,ET4 ,ES4 ,ET4 ,ET4 ,ET4 ,ET4 ,ET4 ,ET4 ,
  323.         ET4 ,ET4 ,EE4 ,NE4 ,ET4 ,ET4 ,ET4 ,ET4 ,ET4 ,ET4 ,ET4 ,ET4 },/*es4*/
  324. es4a[]={LAF_,LAF_,LAF_,LAF_,LAF_,LAF_,LAF_,GET_,LAF_,LAF_,LAF_,LAF_,LAF_,LAF_,
  325.         LAF_,LAF_,LAM_,LAM_,LAF_,LAF_,LAF_,LAF_,LAF_,LAF_,LAF_,LAF_},
  326.  
  327. ee4 []={ET4 ,ET4 ,ET4 ,ET4 ,ET4 ,ET4 ,ET4 ,EE4 ,ET4 ,ET4 ,ET4 ,ET4 ,ET4 ,ET4 ,
  328.         ET4 ,ET4 ,ET4 ,ET4 ,ET4 ,ET4 ,ET4 ,ET4 ,ET4 ,ET4 ,ET4 ,ET4 },/*ee4*/
  329. ee4a[]={LAF_,LAF_,LAF_,ETC_,LAF_,LAF_,LAF_,GET_,LAF_,LAF_,LAF_,LAF_,LAF_,LAF_,
  330.         LAF_,LAF_,LAF_,LAF_,LAF_,LAF_,LAF_,LAF_,LAF_,LAF_,NET_,LAF_},
  331.  
  332. ne4 []={EE4 ,EE4 ,EE4 ,ET4 ,EE4 ,EE4 ,EE4 ,NE4 ,EE4 ,EE4 ,EE4 ,EE4 ,EE4 ,EE4 ,
  333.         EE4 ,EE4 ,EE4 ,EE4 ,EE4 ,EE4 ,EE4 ,EE4 ,EE4 ,EE4 ,ET4 ,EE4 },/*ne4*/
  334. ne4a[]={RC2_,RC2_,RC2_,ETC_,RC2_,RC2_,RC2_,GET_,RC2_,RC2_,RC2_,RC2_,RC2_,RC2_,
  335.         RC2_,RC2_,RC2_,RC2_,RC2_,RC2_,RC2_,RC2_,RC2_,RC2_,NET_,RC2_},
  336.  
  337. *conrtab[] = {et4, et4a, da4, da4a, er4, er4a, cr4, cr4a,
  338.               es4, es4a, ee4, ee4a, ne4, ne4a};
  339. struct parse pcbconr = {(UNCH *)"CONR", lexcon, conrtab, 0, 0, 0, 0};
  340. #undef ET4
  341. #undef DA4
  342. #undef ER4
  343. #undef CR4
  344. #undef ES4
  345. #undef EE4
  346. #undef NE4
  347. /******************************************************************************/
  348. /* PCBCONC: State and action table for content parse of character data.
  349.             Initial state assumes a start-tag was just processed.
  350. */
  351. /* Symbols for state names (end with a number). */
  352. #define ET6     0   /* Markup found or buffer flushed; no data. */
  353. #define DA6     2   /* Data in buffer. */
  354. #define ES6     4   /* TAGO found; start lookahead buffer. */
  355. #define EE6     6   /* End-tag start (TAGO,ETI); move to lookahead buffer. */
  356. #define NE6     8   /* End-tag start (TAGO,NET); process NET if not end-tag. */
  357.  
  358. static UNCH
  359. /*      free nu   nmc  nms  spc  non  ee   eob  rs   re   sep  cde  nsc  ero
  360.         nmre com  eti  net  mdo  msc  mso  pero pio  rni  tagc tago  */
  361. et6 []={DA6 ,DA6 ,DA6 ,DA6 ,DA6 ,ET6 ,ET6 ,ET6 ,ET6 ,ET6 ,DA6 ,DA6 ,DA6 ,DA6 ,
  362.         ET6 ,DA6 ,DA6 ,ET6 ,DA6 ,DA6 ,DA6 ,DA6 ,DA6 ,DA6 ,DA6 ,ES6 },/*et6*/
  363. et6a[]={DAS_,DAS_,DAS_,DAS_,DAS_,NON_,EOF_,GET_,RS_ ,REF_,DAS_,DAS_,DAS_,DAS_,
  364.         REF_,DAS_,DAS_,NED_,DAS_,DAS_,DAS_,DAS_,DAS_,DAS_,DAS_,LAS_},
  365.  
  366. da6 []={DA6 ,DA6 ,DA6 ,DA6 ,DA6 ,ET6 ,ET6 ,ET6 ,ET6 ,ET6 ,DA6 ,DA6 ,DA6 ,ET6 ,
  367.         ET6 ,DA6 ,DA6 ,ET6 ,DA6 ,DA6 ,DA6 ,DA6 ,DA6 ,DA6 ,DA6 ,ET6 },/*da6*/
  368. da6a[]={NOP_,NOP_,NOP_,NOP_,NOP_,DAF_,DAF_,DAF_,DAF_,DAF_,NOP_,NOP_,NOP_,DAF_,
  369.         DAF_,NOP_,NOP_,DAF_,NOP_,NOP_,NOP_,NOP_,NOP_,NOP_,NOP_,DAF_},
  370.  
  371. /*      free nu   nmc  nms  spc  non  ee   eob  rs   re   sep  cde  nsc  ero
  372.         nmre com  eti  net  mdo  msc  mso  pero pio  rni  tagc tago  */
  373. es6 []={ET6 ,ET6 ,ET6 ,ET6 ,ET6 ,ET6 ,ET6 ,ES6 ,ET6 ,ET6 ,ET6 ,ET6 ,ET6 ,ET6 ,
  374.         ET6 ,ET6 ,EE6 ,NE6 ,ET6 ,ET6 ,ET6 ,ET6 ,ET6 ,ET6 ,ET6 ,ET6 },/*es6*/
  375. es6a[]={LAF_,LAF_,LAF_,LAF_,LAF_,LAF_,LAF_,GET_,LAF_,LAF_,LAF_,LAF_,LAF_,LAF_,
  376.         LAF_,LAF_,LAM_,LAM_,LAF_,LAF_,LAF_,LAF_,LAF_,LAF_,LAF_,LAF_},
  377.  
  378. ee6 []={ET6 ,ET6 ,ET6 ,ET6 ,ET6 ,ET6 ,ET6 ,EE6 ,ET6 ,ET6 ,ET6 ,ET6 ,ET6 ,ET6 ,
  379.         ET6 ,ET6 ,ET6 ,ET6 ,ET6 ,ET6 ,ET6 ,ET6 ,ET6 ,ET6 ,ET6 ,ET6 },/*ee6*/
  380. ee6a[]={LAF_,LAF_,LAF_,ETC_,LAF_,LAF_,LAF_,GET_,LAF_,LAF_,LAF_,LAF_,LAF_,LAF_,
  381.         LAF_,LAF_,LAF_,LAF_,LAF_,LAF_,LAF_,LAF_,LAF_,LAF_,NET_,LAF_},
  382.  
  383. ne6 []={EE6 ,EE6 ,EE6 ,ET6 ,EE6 ,EE6 ,EE6 ,NE6 ,EE6 ,EE6 ,EE6 ,EE6 ,EE6 ,EE6 ,
  384.         EE6 ,EE6 ,EE6 ,EE6 ,EE6 ,EE6 ,EE6 ,EE6 ,EE6 ,EE6 ,ET6 ,EE6 },/*ne6*/
  385. ne6a[]={RC2_,RC2_,RC2_,ETC_,RC2_,RC2_,RC2_,GET_,RC2_,RC2_,RC2_,RC2_,RC2_,RC2_,
  386.         RC2_,RC2_,RC2_,RC2_,RC2_,RC2_,RC2_,RC2_,RC2_,RC2_,NET_,RC2_},
  387.  
  388. *conctab[] = {et6, et6a, da6, da6a, es6, es6a, ee6, ee6a, ne6, ne6a};
  389. struct parse pcbconc = {(UNCH *)"CONC", lexcon, conctab, 0, 0, 0, 0};
  390. #undef ET6
  391. #undef DA6
  392. #undef ES6
  393. #undef EE6
  394. #undef NE6
  395. /******************************************************************************/
  396. /* PCBPRO: State and action table for prolog parse.
  397.            Initial state assumes document just began.
  398. */
  399. /* Symbols for state names (end with a number). */
  400. #define ET7     0   /* Markup found. */
  401. #define ES7     2   /* TAGO found; start lookahead buffer. */
  402. #define MD7     4   /* MDO found (TAGO, MDO[2]). */
  403. #define MC7     6   /* MDO, COM found. */
  404.  
  405. static UNCH
  406. /*      free nu   nmc  nms  spc  non  ee   eob  rs   re   sep  cde  nsc  ero
  407.         nmre com  eti  net  mdo  msc  mso  pero pio  rni  tagc tago */
  408. et7 []={ET7 ,ET7 ,ET7 ,ET7 ,ET7 ,ET7 ,ET7 ,ET7 ,ET7 ,ET7 ,ET7 ,ET7 ,ET7 ,ET7 ,
  409.         ET7 ,ET7 ,ET7 ,ET7 ,ET7 ,ET7 ,ET7 ,ET7 ,ET7 ,ET7 ,ET7 ,ES7 },/*et7*/
  410. et7a[]={DCE_,DCE_,DCE_,DCE_,NOP_,DCE_,EOF_,GET_,RS_ ,NOP_,NOP_,DCE_,DCE_,DCE_,
  411.         DCE_,DCE_,DCE_,DCE_,DCE_,DCE_,DCE_,DCE_,DCE_,DCE_,DCE_,LAS_},
  412.  
  413. es7 []={ET7 ,ET7 ,ET7 ,ET7 ,ET7 ,ET7 ,ET7 ,ES7 ,ET7 ,ET7 ,ET7 ,ET7 ,ET7 ,ET7 ,
  414.         ET7 ,ET7 ,ET7 ,ET7 ,MD7 ,ET7 ,ET7 ,ET7 ,ET7 ,ET7 ,ET7 ,ET7 },/*es7*/
  415. es7a[]={PEP_,PEP_,PEP_,PEP_,PEP_,PEP_,PEP_,GET_,PEP_,PEP_,PEP_,PEP_,PEP_,PEP_,
  416.         PEP_,PEP_,PEP_,PEP_,LAM_,PEP_,PEP_,PEP_,PIS_,PEP_,PEP_,PEP_},
  417.  
  418. md7 []={ET7, ET7, ET7, ET7, ET7 ,ET7, ET7, MD7, ET7 ,ET7 ,ET7 ,ET7, ET7, ET7,
  419.         ET7, MC7, ET7, ET7, ET7, ET7 ,ET7, ET7, ET7, ET7 ,ET7, ET7 },/*md7*/
  420. md7a[]={LAF_,LAF_,LAF_,DTD_,LAF_,LAF_,LAF_,GET_,LAF_,LAF_,LAF_,LAF_,LAF_,LAF_,
  421.         LAF_,LAM_,LAF_,LAF_,LAF_,LAF_,LAF_,LAF_,LAF_,LAF_,NOP_,LAF_},
  422.  
  423. mc7 []={ET7, ET7, ET7, ET7, ET7, ET7 ,ET7, MC7, ET7 ,ET7, ET7 ,ET7, ET7, ET7,
  424.         ET7, ET7, ET7, ET7, ET7, ET7 ,ET7 ,ET7, ET7 ,ET7 ,ET7, ET7 },/*mc7*/
  425. mc7a[]={LAF_,LAF_,LAF_,LAF_,LAF_,LAF_,LAF_,GET_,LAF_,LAF_,LAF_,LAF_,LAF_,LAF_,
  426.         LAF_,MDC_,LAF_,LAF_,LAF_,LAF_,LAF_,LAF_,LAF_,LAF_,LAF_,LAF_},
  427.  
  428. *protab[] = {et7, et7a, es7, es7a, md7, md7a, mc7, mc7a};
  429. struct parse pcbpro = {(UNCH *)"PRO", lexcon, protab, 0, 0, 0, 0};
  430. #undef ET7
  431. #undef ES7
  432. #undef MD7
  433. #undef MC7
  434. /******************************************************************************/
  435. /* PCBMDS: State and action table for parse of markup declaration subset.
  436.            Initial state assumes subset just began (MSO found).
  437. */
  438. /* Symbols for state names (end with a number). */
  439. #define ET8     0   /* Markup found. */
  440. #define ER8     2   /* PERO found; start lookahead buffer. */
  441. #define ME8     4   /* MSC found. */
  442. #define ME9     6   /* MSC, MSC found. */
  443. #define ES8     8   /* TAGO found; start lookahead buffer. */
  444. #define MD8    10   /* MDO found (TAGO, MDO[2]). */
  445. #define MC8    12   /* MDO, CD found. */
  446. #define DC8    14   /* Data characters found (erroneously). */
  447.  
  448. static UNCH
  449. /*      free nu   nmc  nms  spc  non  ee   eob  rs   re   sep  cde  nsc  ero
  450.         nmre com  eti  net  mdo  msc  mso  pero pio  rni  tagc tago */
  451. et8 []={DC8 ,DC8 ,DC8 ,DC8 ,ET8 ,DC8 ,ET8 ,ET8 ,ET8 ,ET8 ,ET8 ,DC8 ,DC8 ,DC8 ,
  452.         DC8 ,DC8 ,DC8 ,DC8 ,DC8 ,ME8 ,DC8 ,ER8 ,DC8 ,DC8 ,DC8 ,ES8 },/*et8*/
  453. et8a[]={NOP_,NOP_,NOP_,NOP_,NOP_,SYS_,GET_,GET_,RS_ ,NOP_,NOP_,NOP_,NOP_,NOP_,
  454.         NOP_,NOP_,NOP_,NOP_,NOP_,NOP_,NOP_,NOP_,NOP_,NOP_,NOP_,NOP_},
  455.  
  456. er8 []={DC8 ,DC8 ,DC8 ,ET8 ,DC8 ,DC8 ,DC8 ,ER8 ,DC8 ,DC8 ,DC8 ,DC8 ,DC8 ,DC8 ,
  457.         DC8 ,DC8 ,DC8 ,DC8 ,DC8 ,DC8 ,DC8 ,DC8 ,DC8 ,DC8 ,DC8 ,DC8 },/*er8*/
  458. er8a[]={NOP_,NOP_,NOP_,PER_,NOP_,SYS_,NOP_,GET_,NOP_,NOP_,NOP_,NOP_,NOP_,NOP_,
  459.         NOP_,NOP_,NOP_,NOP_,NOP_,NOP_,NOP_,NOP_,NOP_,NOP_,NOP_,NOP_},
  460.  
  461. me8 []={ET8, ET8, ET8, ET8, ET8 ,ET8, ET8, ME8, ET8 ,ET8 ,ET8 ,ET8, ET8, ET8,
  462.         ET8 ,ET8, ET8 ,ET8, ET8, ME9 ,ET8, ET8, ET8, ET8 ,ET8, ET8 },/*me8*/
  463. me8a[]={DTE_,DTE_,DTE_,DTE_,DTE_,DTE_,DTE_,GET_,DTE_,DTE_,DTE_,DTE_,DTE_,DTE_,
  464.         DTE_,DTE_,DTE_,DTE_,DTE_,NOP_,DTE_,DTE_,DTE_,DTE_,DTE_,DTE_},
  465.  
  466. me9 []={DC8, DC8, DC8, DC8, DC8 ,DC8, DC8, ME9, DC8 ,DC8 ,DC8 ,DC8, DC8, DC8,
  467.         DC8 ,DC8, DC8 ,DC8, DC8, DC8 ,DC8, DC8, DC8, DC8 ,ET8, DC8 },/*me9*/
  468. me9a[]={NOP_,NOP_,NOP_,NOP_,NOP_,SYS_,NOP_,GET_,NOP_,NOP_,NOP_,NOP_,NOP_,NOP_,
  469.         NOP_,NOP_,NOP_,NOP_,NOP_,NOP_,NOP_,NOP_,NOP_,NOP_,MSE_,NOP_},
  470.  
  471. /*      free nu   nmc  nms  spc  non  ee   eob  rs   re   sep  cde  nsc  ero
  472.         nmre com  eti  net  mdo  msc  mso  pero pio  rni  tagc tago */
  473. es8 []={DC8 ,DC8 ,DC8 ,DC8 ,DC8 ,DC8 ,DC8 ,ES8 ,DC8 ,DC8 ,DC8 ,DC8 ,DC8 ,DC8 ,
  474.         DC8 ,DC8 ,DC8 ,DC8 ,MD8 ,DC8 ,DC8 ,DC8 ,ET8 ,DC8 ,DC8 ,DC8 },/*es8*/
  475. es8a[]={NOP_,NOP_,NOP_,NOP_,NOP_,SYS_,NOP_,GET_,NOP_,NOP_,NOP_,NOP_,NOP_,NOP_,
  476.         NOP_,NOP_,NOP_,NOP_,NOP_,NOP_,NOP_,NOP_,PIS_,NOP_,NOP_,NOP_},
  477.  
  478. md8 []={DC8, DC8, DC8, ET8, DC8 ,DC8, DC8, MD8, DC8 ,DC8 ,DC8 ,DC8, DC8, DC8,
  479.         DC8 ,MC8, DC8 ,DC8, DC8, DC8 ,ET8, DC8, DC8, DC8 ,ET8, DC8 },/*md8*/
  480. md8a[]={NOP_,NOP_,NOP_,MD_ ,NOP_,SYS_,NOP_,GET_,NOP_,NOP_,NOP_,NOP_,NOP_,NOP_,
  481.         NOP_,NOP_,NOP_,NOP_,NOP_,NOP_,MSS_,NOP_,NOP_,NOP_,NOP_,NOP_},
  482.  
  483. mc8 []={DC8, DC8, DC8, DC8, DC8, DC8 ,DC8, MC8, DC8 ,DC8, DC8 ,DC8, DC8, DC8,
  484.         DC8 ,ET8, DC8 ,DC8, DC8, DC8 ,DC8 ,DC8, DC8 ,DC8 ,DC8, DC8 },/*mc8*/
  485. mc8a[]={NOP_,NOP_,NOP_,NOP_,NOP_,SYS_,NOP_,GET_,NOP_,NOP_,NOP_,NOP_,NOP_,NOP_,
  486.         NOP_,MDC_,NOP_,NOP_,NOP_,NOP_,NOP_,NOP_,NOP_,NOP_,NOP_,NOP_},
  487.  
  488. dc8 []={DC8 ,DC8 ,DC8 ,DC8 ,DC8 ,DC8 ,DC8 ,DC8 ,DC8 ,DC8 ,DC8 ,DC8 ,DC8 ,DC8 ,
  489.         DC8 ,DC8 ,DC8 ,DC8 ,DC8 ,ET8 ,DC8 ,ET8 ,DC8 ,DC8 ,DC8 ,ET8 },/*dc8*/
  490. dc8a[]={NOP_,NOP_,NOP_,NOP_,NOP_,SYS_,GET_,GET_,RS_ ,NOP_,NOP_,NOP_,NOP_,NOP_,
  491.         NOP_,NOP_,NOP_,NOP_,NOP_,CIR_,NOP_,CIR_,NOP_,NOP_,NOP_,CIR_},
  492.  
  493. *mdstab[] = {et8, et8a, er8, er8a, me8, me8a, me9, me9a,
  494.              es8, es8a, md8, md8a, mc8, mc8a, dc8, dc8a};
  495. struct parse pcbmds = {(UNCH *)"MDS", lexcon, mdstab, 0, 0, 0, 0};
  496. #undef ET8
  497. #undef ER8
  498. #undef ME8
  499. #undef ME9
  500. #undef ES8
  501. #undef MD8
  502. #undef MC8
  503. #undef DC8
  504. /******************************************************************************/
  505. /* PCBGRCM: State and action table for content model group.
  506.             Groups can nest.  Reserved names are allowed.
  507.             Data tag token groups are allowed.
  508.             A non-reserved name or model group can have a suffix.
  509.             Columns are based on LEXGRP.C.
  510. */
  511. /* Symbols for state names (end with a number). */
  512. #define TK1     0   /* Token expected: name, #CHARS, data tag grp, model. */
  513. #define CO1     2   /* Connector between tokens expected. */
  514. #define ER1     4   /* PERO found when token was expected. */
  515. #define SP1     6   /* Name or model: suffix or connector expected. */
  516. #define RN1     8   /* RNI found; possible #PCDATA. */
  517. #define DG1    10   /* Data tag: group begun; name expected. */
  518. #define DN1    12   /* Data tag: name found; SEQ connector expected. */
  519. #define DT1    14   /* Data tag: ignore template and pattern; MSC expected. */
  520. #define DR1    16   /* PERO found when data tag name was expected. */
  521. #define LI1    18   /* Literal in data tag group; search for LIT. */
  522. #define LA1    20   /* Literal in data tag group; search for LITA. */
  523.  
  524. static UNCH
  525. /*       bit  nmc  nms  re   spc  non  ee   eob  rs   and  grpc grpo lit  lita
  526.          dtgc dtgo opt  or   pero plus rep  rni  seq  refc */
  527. tk01 []={TK1 ,TK1 ,SP1 ,TK1 ,TK1 ,TK1 ,TK1 ,TK1 ,TK1 ,TK1 ,TK1 ,TK1 ,TK1 ,TK1 ,
  528.          TK1 ,DG1 ,TK1 ,TK1 ,ER1 ,TK1 ,TK1 ,RN1 ,TK1 ,TK1 },/*tk1*/
  529. tk01a[]={INV_,INV_,NAS_,NOP_,NOP_,SYS_,EOF_,GET_,RS_ ,INV_,INV_,GRP_,INV_,INV_,
  530.          INV_,GRP_,INV_,INV_,NOP_,INV_,INV_,NOP_,INV_,INV_},
  531.  
  532. co01 []={TK1 ,TK1 ,TK1 ,CO1 ,CO1 ,CO1 ,CO1 ,CO1 ,CO1 ,TK1 ,SP1 ,TK1 ,TK1 ,TK1 ,
  533.          TK1 ,TK1 ,TK1 ,TK1 ,TK1 ,TK1 ,TK1 ,TK1 ,TK1 ,TK1 },/*co1*/
  534. co01a[]={INV_,INV_,INV_,NOP_,NOP_,SYS_,EE_ ,GET_,RS_ ,AND ,GRPE,INV_,INV_,INV_,
  535.          INV_,INV_,INV_,OR  ,INV_,INV_,INV_,INV_,SEQ ,INV_},
  536.  
  537. er01 []={TK1 ,TK1 ,TK1 ,TK1 ,TK1 ,ER1 ,TK1 ,ER1 ,TK1 ,TK1 ,TK1 ,TK1 ,TK1 ,TK1 ,
  538.          TK1 ,TK1 ,TK1 ,TK1 ,TK1 ,TK1 ,TK1 ,TK1 ,TK1 ,TK1 },/*er1*/
  539. er01a[]={PCI_,PCI_,PER_,PCI_,PCI_,SYS_,PCI_,GET_,PCI_,PCI_,PCI_,PCI_,PCI_,PCI_,
  540.          PCI_,PCI_,PCI_,PCI_,PCI_,PCI_,PCI_,PCI_,PCI_,PCI_},
  541.  
  542. sp01 []={TK1 ,TK1 ,TK1 ,CO1 ,CO1 ,SP1 ,CO1 ,SP1 ,CO1 ,TK1 ,SP1 ,TK1 ,TK1 ,TK1 ,
  543.          TK1 ,TK1 ,CO1 ,TK1 ,TK1 ,CO1 ,CO1 ,TK1 ,TK1 ,TK1 },/*sp1*/
  544. sp01a[]={INV_,LEN_,LEN_,NOP_,NOP_,SYS_,EE_ ,GET_,RS_ ,AND ,GRPE,INV_,INV_,INV_,
  545.          INV_,INV_,OPT ,OR  ,INV_,REP ,OREP,INV_,SEQ ,LEN_},
  546.  
  547. /*       bit  nmc  nms  spc  spc  non  ee   eob  rs   and  grpc grpo lit  lita
  548.          dtgc dtgo opt  or   pero plus rep  rni  seq  refc  */
  549. rn01 []={TK1 ,TK1 ,CO1 ,TK1 ,TK1 ,RN1 ,TK1 ,RN1 ,TK1 ,TK1 ,TK1 ,TK1 ,TK1 ,TK1 ,
  550.          TK1 ,TK1 ,TK1 ,TK1 ,TK1 ,TK1 ,TK1 ,TK1 ,TK1 ,TK1 },/*rn1*/
  551. rn01a[]={PCI_,PCI_,RNS_,PCI_,PCI_,SYS_,PCI_,GET_,PCI_,PCI_,PCI_,PCI_,PCI_,PCI_,
  552.          PCI_,PCI_,PCI_,PCI_,PCI_,PCI_,PCI_,PCI_,PCI_,PCI_},
  553.  
  554. dg01 []={TK1 ,TK1 ,DN1 ,DG1 ,DG1 ,DG1 ,DG1 ,DG1 ,DG1 ,TK1 ,TK1 ,TK1 ,TK1 ,TK1 ,
  555.          TK1 ,TK1 ,TK1 ,TK1 ,DR1 ,TK1 ,TK1 ,TK1 ,TK1 ,TK1 },/*dg1*/
  556. dg01a[]={INV_,INV_,NAS_,NOP_,NOP_,SYS_,EOF_,GET_,RS_ ,INV_,INV_,INV_,INV_,INV_,
  557.          INV_,INV_,INV_,INV_,NOP_,INV_,INV_,INV_,INV_,INV_},
  558.  
  559. dn01 []={TK1 ,TK1 ,TK1 ,DN1 ,DN1 ,DN1 ,DN1 ,DN1 ,DN1 ,TK1 ,TK1 ,TK1 ,TK1 ,TK1 ,
  560.          TK1 ,TK1 ,TK1 ,TK1 ,TK1 ,TK1 ,TK1 ,TK1 ,DT1 ,TK1 },/*dn1*/
  561. dn01a[]={INV_,INV_,INV_,NOP_,NOP_,SYS_,EE_ ,GET_,RS_ ,INV_,INV_,INV_,INV_,INV_,
  562.          INV_,INV_,INV_,INV_,INV_,INV_,INV_,INV_,DTAG,INV_},
  563.  
  564. dt01 []={TK1 ,TK1 ,TK1 ,DT1 ,DT1 ,DT1 ,DT1 ,DT1 ,DT1 ,TK1 ,DT1 ,DT1 ,LI1 ,LA1 ,
  565.          CO1 ,TK1 ,TK1 ,DT1 ,DT1 ,TK1 ,TK1 ,TK1 ,DT1 ,TK1 },/*dt1*/
  566. dt01a[]={INV_,INV_,INV_,NOP_,NOP_,SYS_,EE_ ,GET_,RS_ ,INV_,NOP_,NOP_,NOP_,NOP_,
  567.          GRPE,INV_,INV_,NOP_,NOP_,INV_,INV_,INV_,NOP_,INV_},
  568.  
  569. /*       bit  nmc  nms  spc  spc  non  ee   eob  rs   and  grpc grpo lit  lita
  570.          dtgc dtgo opt  or   pero plus rep  rni  seq  refc  */
  571. dr01 []={TK1 ,TK1 ,DG1 ,TK1 ,TK1 ,DR1 ,TK1 ,DR1 ,TK1 ,TK1 ,TK1 ,TK1 ,TK1 ,TK1 ,
  572.          TK1 ,TK1 ,TK1 ,TK1 ,TK1 ,TK1 ,TK1 ,TK1 ,TK1 ,TK1 },/*dr1*/
  573. dr01a[]={PCI_,PCI_,PER_,PCI_,PCI_,SYS_,PCI_,GET_,PCI_,PCI_,PCI_,PCI_,PCI_,PCI_,
  574.          PCI_,PCI_,PCI_,PCI_,PCI_,PCI_,PCI_,PCI_,PCI_,PCI_},
  575.  
  576. li01 []={LI1 ,LI1 ,LI1 ,LI1 ,LI1 ,LI1 ,LI1 ,LI1 ,LI1 ,LI1 ,LI1 ,LI1 ,DT1 ,LI1 ,
  577.          LI1 ,LI1 ,LI1 ,LI1 ,LI1 ,LI1 ,LI1 ,LI1 ,LI1 ,LI1 },/*li1*/
  578. li01a[]={NOP_,NOP_,NOP_,NOP_,NOP_,SYS_,EOF_,GET_,RS_ ,NOP_,NOP_,NOP_,NOP_,NOP_,
  579.          NOP_,NOP_,NOP_,NOP_,NOP_,NOP_,NOP_,NOP_,NOP_,NOP_},
  580.  
  581. la01 []={LA1 ,LA1 ,LA1 ,LA1 ,LA1 ,LA1 ,LA1 ,LA1 ,LA1 ,LA1 ,LA1 ,LA1 ,LA1 ,DT1 ,
  582.          LA1 ,LA1 ,LA1 ,LA1 ,LA1 ,LA1 ,LA1 ,LA1 ,LA1 ,LA1 },/*la1*/
  583. la01a[]={NOP_,NOP_,NOP_,NOP_,NOP_,SYS_,EOF_,GET_,RS_ ,NOP_,NOP_,NOP_,NOP_,NOP_,
  584.          NOP_,NOP_,NOP_,NOP_,NOP_,NOP_,NOP_,NOP_,NOP_,NOP_},
  585.  
  586. *grcmtab[] = {tk01, tk01a, co01, co01a, er01, er01a, sp01, sp01a,
  587.               rn01, rn01a, dg01, dg01a, dn01, dn01a, dt01, dt01a,
  588.               dr01, dr01a, li01, li01a, la01, la01a};
  589. struct parse pcbgrcm = {(UNCH *)"GRCM", lexgrp, grcmtab, 0, 0, 0, 0};
  590. #undef TK1
  591. #undef CO1
  592. #undef ER1
  593. #undef SP1
  594. #undef RN1
  595. #undef DG1
  596. #undef DN1
  597. #undef DT1
  598. #undef DR1
  599. #undef LI1
  600. #undef LA1
  601. /******************************************************************************/
  602. /* PCBGRCS: State and action table for content model suffix.
  603.             If suffix occurs, process it.  Otherwise, put character
  604.             back for the next parse.
  605. */
  606. /* Symbols for state names (end with a number). */
  607. #define SP4     0   /* Suffix expected. */
  608.  
  609. static UNCH
  610. /*       bit  nmc  nms  re   spc  non  ee   eob  rs   and  grpc grpo lit  lita
  611.          dtgc dtgo opt  or   pero plus rep  rni  seq  refc */
  612. sp04 []={SP4 ,SP4 ,SP4 ,SP4 ,SP4 ,SP4 ,SP4 ,SP4 ,SP4 ,SP4 ,SP4 ,SP4 ,SP4 ,SP4 ,
  613.          SP4 ,SP4 ,SP4 ,SP4 ,SP4 ,SP4 ,SP4 ,SP4 ,SP4 ,SP4 },/*sp4*/
  614. sp04a[]={RCR_,RCR_,RCR_,RCR_,RCR_,SYS_,EE_ ,GET_,RCR_,RCR_,RCR_,RCR_,RCR_,RCR_,
  615.          RCR_,RCR_,OPT ,RCR_,RCR_,REP ,OREP,RCR_,RCR_,RCR_},
  616.  
  617. *grcstab[] = {sp04, sp04a};
  618. struct parse pcbgrcs = {(UNCH *)"GRCS", lexgrp, grcstab, 0, 0, 0, 0};
  619. #undef SP4
  620. /******************************************************************************/
  621. /* PCBGRNT: State and action table for name token group parse.
  622.             Groups cannot nest.  Reserved names are not allowed.
  623.             No suffixes or data tag pattern groups.
  624. */
  625. /* Symbols for state names (end with a number). */
  626. #define TK1     0   /* Token expected: name, #CHARS, data tag grp, model. */
  627. #define CO1     2   /* Connector between tokens expected. */
  628. #define ER1     4   /* PERO found when token was expected. */
  629.  
  630. static UNCH
  631. /*       bit  nmc  nms  re   spc  non  ee   eob  rs   and  grpc grpo lit  lita
  632.          dtgc dtgo opt  or   pero plus rep  rni  seq  refc  */
  633. tk02 []={TK1 ,CO1 ,CO1 ,TK1 ,TK1 ,TK1 ,TK1 ,TK1 ,TK1 ,TK1 ,TK1 ,TK1 ,TK1 ,TK1 ,
  634.          TK1 ,TK1 ,TK1 ,TK1 ,ER1 ,TK1 ,TK1 ,TK1 ,TK1 ,CO1 },/*tk1*/
  635. tk02a[]={INV_,NMT_,NMT_,NOP_,NOP_,SYS_,EOF_,GET_,RS_ ,INV_,INV_,INV_,INV_,INV_,
  636.          INV_,INV_,INV_,INV_,NOP_,INV_,INV_,INV_,INV_,NMT_},
  637.  
  638. co02 []={TK1 ,TK1 ,TK1 ,CO1 ,CO1 ,CO1 ,CO1 ,CO1 ,CO1 ,TK1 ,TK1 ,TK1 ,TK1 ,TK1 ,
  639.          TK1 ,TK1 ,TK1 ,TK1 ,TK1 ,TK1 ,TK1 ,TK1 ,TK1 ,TK1 },/*co1*/
  640. co02a[]={INV_,INV_,INV_,NOP_,NOP_,SYS_,EE_ ,GET_,RS_ ,NOP_,GRPE,INV_,INV_,INV_,
  641.          INV_,INV_,INV_,NOP_,INV_,INV_,INV_,INV_,NOP_,INV_},
  642.  
  643. er02 []={TK1 ,TK1 ,TK1 ,TK1 ,TK1 ,ER1 ,TK1 ,ER1 ,TK1 ,TK1 ,TK1 ,TK1 ,TK1 ,TK1 ,
  644.          TK1 ,TK1 ,TK1 ,TK1 ,TK1 ,TK1 ,TK1 ,TK1 ,TK1 ,TK1 },/*er1*/
  645. er02a[]={PCI_,PCI_,PER_,PCI_,PCI_,SYS_,PCI_,GET_,PCI_,PCI_,PCI_,PCI_,PCI_,PCI_,
  646.          PCI_,PCI_,PCI_,PCI_,PCI_,PCI_,PCI_,PCI_,PCI_,PCI_},
  647.  
  648. *grnttab[] = {tk02, tk02a, co02, co02a, er02, er02a};
  649. struct parse pcbgrnt = {(UNCH *)"GRNT", lexgrp, grnttab, 0, 0, 0, 0};
  650. #undef TK1
  651. #undef CO1
  652. #undef ER1
  653. /******************************************************************************/
  654. /* PCBGRNM: State and action table for name group parse.
  655.             Groups cannot nest.  Reserved names are not allowed.
  656.             No suffixes or data tag pattern groups.
  657. */
  658. /* Symbols for state names (end with a number). */
  659. #define TK1     0   /* Token expected: name, #CHARS, data tag grp, model. */
  660. #define CO1     2   /* Connector between tokens expected. */
  661. #define ER1     4   /* PERO found when token was expected. */
  662.  
  663. static UNCH
  664. /*       bit  nmc  nms  re   spc  non  ee   eob  rs   and  grpc grpo lit  lita
  665.          dtgc dtgo opt  or   pero plus rep  rni  seq  refc  */
  666. tk03 []={TK1 ,TK1 ,CO1 ,TK1 ,TK1 ,TK1 ,TK1 ,TK1 ,TK1 ,TK1 ,TK1 ,TK1 ,TK1 ,TK1 ,
  667.          TK1 ,TK1 ,TK1 ,TK1 ,ER1 ,TK1 ,TK1 ,TK1 ,TK1 ,TK1 },/*tk1*/
  668. tk03a[]={INV_,INV_,NAS_,NOP_,NOP_,SYS_,EOF_,GET_,RS_ ,INV_,INV_,INV_,INV_,INV_,
  669.          INV_,INV_,INV_,INV_,NOP_,INV_,INV_,INV_,INV_,INV_},
  670.  
  671. co03 []={TK1 ,TK1 ,TK1 ,CO1 ,CO1 ,CO1 ,CO1 ,CO1 ,CO1 ,TK1 ,TK1 ,TK1 ,TK1 ,TK1 ,
  672.          TK1 ,TK1 ,TK1 ,TK1 ,TK1 ,TK1 ,TK1 ,TK1 ,TK1 ,TK1 },/*co1*/
  673. co03a[]={INV_,INV_,INV_,NOP_,NOP_,SYS_,EE_ ,GET_,RS_ ,NOP_,GRPE,INV_,INV_,INV_,
  674.          INV_,INV_,INV_,NOP_,INV_,INV_,INV_,INV_,NOP_,INV_},
  675.  
  676. er03 []={TK1 ,TK1 ,TK1 ,TK1 ,TK1 ,ER1 ,TK1 ,ER1 ,TK1 ,TK1 ,TK1 ,TK1 ,TK1 ,TK1 ,
  677.          TK1 ,TK1 ,TK1 ,TK1 ,TK1 ,TK1 ,TK1 ,TK1 ,TK1 ,TK1 },/*er1*/
  678. er03a[]={PCI_,PCI_,PER_,PCI_,PCI_,SYS_,PCI_,GET_,PCI_,PCI_,PCI_,PCI_,PCI_,PCI_,
  679.          PCI_,PCI_,PCI_,PCI_,PCI_,PCI_,PCI_,PCI_,PCI_,PCI_},
  680.  
  681. *grnmtab[] = {tk03, tk03a, co03, co03a, er03, er03a};
  682. struct parse pcbgrnm = {(UNCH *)"GRNM", lexgrp, grnmtab, 0, 0, 0, 0};
  683. #undef TK1
  684. #undef CO1
  685. #undef ER1
  686. /******************************************************************************/
  687. /* PCBREF: State and action table to find the end of entity, parameter entity,
  688.            and character references.  The opening delimiter and name
  689.            have already been found; the parse determines whether the
  690.            tokenization of the name ended normally and processes the REFC.
  691. */
  692. /* Symbols for state names (end with a number). */
  693. #define ER5     0   /* Handle REFC or other entity reference termination. */
  694. #define ER6     2   /* Return to caller and reset state for next call. */
  695.  
  696. static UNCH
  697. /*       bit  nmc  nms  re   spc  non  ee   eob  rs   and  grpc grpo lit  lita
  698.          dtgc dtgo opt  or   pero plus rep  rni  seq  refc */
  699. er05 []={ER5 ,ER6 ,ER6 ,ER6 ,ER5 ,ER5 ,ER5 ,ER5 ,ER5 ,ER5 ,ER5 ,ER5 ,ER5 ,ER5 ,
  700.          ER5 ,ER5 ,ER5 ,ER5 ,ER5 ,ER5 ,ER5 ,ER5 ,ER5 ,ER6 },/*er5*/
  701. er05a[]={RCR_,LEN_,LEN_,NOP_,RCR_,SYS_,RCR_,GET_,RCR_,RCR_,RCR_,RCR_,RCR_,RCR_,
  702.          RCR_,RCR_,RCR_,RCR_,RCR_,RCR_,RCR_,RCR_,RCR_,NOP_},
  703.  
  704. er06 []={ER5 ,ER5 ,ER5 ,ER5 ,ER5 ,ER5 ,ER5 ,ER5 ,ER5 ,ER5 ,ER5 ,ER5 ,ER5 ,ER5 ,
  705.          ER5 ,ER5 ,ER5 ,ER5 ,ER5 ,ER5 ,ER5 ,ER5 ,ER5 ,ER5 },/*er6*/
  706. er06a[]={RCR_,RCR_,RCR_,RCR_,RCR_,RCR_,RCR_,RCR_,RCR_,RCR_,RCR_,RCR_,RCR_,RCR_,
  707.          RCR_,RCR_,RCR_,RCR_,RCR_,RCR_,RCR_,RCR_,RCR_,RCR_},
  708.  
  709. *reftab[]={er05, er05a, er06, er06a};
  710. struct parse pcbref = {(UNCH *)"ENTREF", lexgrp, reftab, 0, 0, 0, 0};
  711. #undef ER5
  712. #undef ER6
  713. /******************************************************************************/
  714. /******************************************************************************/
  715. /*
  716. Use (typical)           Name   Ending  Chsw References RS   RE   SEP
  717. Parameter literal       LITPC  LIT/A   OK   Parm,Char  RSM_ LAM_ LAM_
  718.      Data tag template                 NO
  719. System ID               LITC   LIT/A   n/a  none       RSM_ LAM_ LAM_
  720.      Processing instruction    PIC
  721. Attribute value         LITRV  LIT/A   NO   Gen,Char   RS_  FUN_ FUN_
  722. Minimum literal         LITV   LIT/A   n/a  none       RS_  FUN_ MLE_
  723. */
  724. /******************************************************************************/
  725. /* PCBLITP: Literal parse with parameter and character references;
  726.             no function character translation.
  727. */
  728. /* Symbols for state names (end with a number). */
  729. #define DA0     0   /* Data in buffer. */
  730. #define ER0     2   /* ERO found. */
  731. #define CR0     4   /* CRO found (ER0, RNI). */
  732. #define PR0     6   /* PRO found (for PCBLITP). */
  733.  
  734. static UNCH
  735. /*       free num  min  nms  spc  non  ee   eob  rs   re   sep  cde  nsc  ero
  736.          mdo  msc  mso  pero rni  tagc tago litc */
  737. da13 []={DA0 ,DA0 ,DA0 ,DA0 ,DA0 ,DA0 ,DA0 ,DA0 ,DA0 ,DA0 ,DA0 ,DA0 ,DA0 ,ER0 ,
  738.          DA0 ,DA0 ,DA0 ,PR0 ,DA0 ,DA0 ,DA0 ,DA0 },/*da3*/
  739. da13a[]={MLA_,MLA_,MLA_,MLA_,MLA_,NON_,EE_ ,GET_,RSM_,MLA_,MLA_,MLA_,MLA_,NOP_,
  740.          MLA_,MLA_,MLA_,NOP_,MLA_,MLA_,MLA_,TER_},
  741.  
  742. er13 []={DA0 ,DA0 ,DA0 ,DA0 ,DA0 ,DA0 ,DA0 ,ER0 ,DA0 ,DA0 ,DA0 ,DA0 ,DA0 ,DA0 ,
  743.          DA0 ,DA0 ,DA0 ,DA0 ,CR0 ,DA0 ,DA0 ,DA0 },/*er3*/
  744. er13a[]={LPR_,LPR_,LPR_,LPR_,LPR_,LPR_,LPR_,GET_,LPR_,LPR_,LPR_,LPR_,LPR_,LPR_,
  745.          LPR_,LPR_,LPR_,LPR_,NOP_,LPR_,LPR_,LPR_},
  746.  
  747. cr13 []={DA0 ,DA0 ,DA0 ,DA0 ,DA0 ,DA0 ,DA0 ,CR0 ,DA0 ,DA0 ,DA0 ,DA0 ,DA0 ,DA0 ,
  748.          DA0 ,DA0 ,DA0 ,DA0 ,DA0 ,DA0 ,DA0 ,DA0 },/*cr3*/
  749. cr13a[]={LP2_,CRN_,LP2_,CRA_,LP2_,LP2_,LP2_,GET_,LP2_,LP2_,LP2_,LP2_,LP2_,LP2_,
  750.          LP2_,LP2_,LP2_,LP2_,LP2_,LP2_,LP2_,LP2_},
  751.  
  752. pr13 []={DA0 ,DA0 ,DA0 ,DA0 ,DA0 ,DA0 ,DA0 ,PR0 ,DA0 ,DA0 ,DA0 ,DA0 ,DA0 ,DA0 ,
  753.          DA0 ,DA0 ,DA0 ,DA0 ,DA0 ,DA0 ,DA0 ,DA0 },/*pr3*/
  754. pr13a[]={LPR_,LPR_,LPR_,PEX_,LPR_,LPR_,LPR_,GET_,LPR_,LPR_,LPR_,LPR_,LPR_,LPR_,
  755.          LPR_,LPR_,LPR_,LPR_,LPR_,LPR_,LPR_,LPR_},
  756.  
  757. *litptab[] = {da13, da13a, er13, er13a, cr13, cr13a, pr13, pr13a};
  758. struct parse pcblitp = {(UNCH *)"LITP", lexlms, litptab, 0, 0, 0, 0};
  759. #undef DA0
  760. #undef ER0
  761. #undef CR0
  762. #undef PR0
  763. /******************************************************************************/
  764. /* PCBLITC: Literal parse; no references; no function char translation.
  765.             Used for character data (system data).
  766. */
  767. /* Symbols for state names (end with a number). */
  768. #define DA0     0   /* Data in buffer. */
  769.  
  770. static UNCH
  771. /*      free num  min  nms  spc  non  ee   eob  rs   re   sep  cde  nsc  ero
  772.         mdo  msc  mso  pero rni  tagc tago litc */
  773. da2 []={DA0 ,DA0 ,DA0 ,DA0 ,DA0 ,DA0 ,DA0 ,DA0 ,DA0 ,DA0 ,DA0 ,DA0 ,DA0 ,DA0 ,
  774.         DA0 ,DA0 ,DA0 ,DA0 ,DA0 ,DA0 ,DA0 ,DA0 },/*da2*/
  775. da2a[]={MLA_,MLA_,MLA_,MLA_,MLA_,SYS_,EOF_,GET_,RSM_,MLA_,MLA_,MLA_,MLA_,MLA_,
  776.         MLA_,MLA_,MLA_,MLA_,MLA_,MLA_,MLA_,TER_},
  777.  
  778. *litctab[] = {da2, da2a};
  779. struct parse pcblitc = {(UNCH *)"LITC", lexlms, litctab, 0, 0, 0, 0};
  780. #undef DA0
  781. /******************************************************************************/
  782. /* PCBLITR: Attribute value parse; general and character references;
  783.             function chars are translated.
  784. */
  785. /* Symbols for state names (end with a number). */
  786. #define DA0     0   /* Data in buffer. */
  787. #define ER0     2   /* ERO found. */
  788. #define CR0     4   /* CRO found (ER0, RNI). */
  789.  
  790. static UNCH
  791. /*       free num  min  nms  spc  non  ee   eob  rs   re   sep  cde  nsc  ero
  792.          mdo  msc  mso  pero rni  tagc tago litc */
  793. da11 []={DA0 ,DA0 ,DA0 ,DA0 ,DA0 ,DA0 ,DA0 ,DA0 ,DA0 ,DA0 ,DA0 ,DA0 ,DA0 ,ER0 ,
  794.          DA0 ,DA0 ,DA0 ,DA0 ,DA0 ,DA0 ,DA0 ,DA0 },/*da1*/
  795. da11a[]={MLA_,MLA_,MLA_,MLA_,MLA_,NON_,EE_ ,GET_,RS_ ,FUN_,FUN_,MLA_,MLA_,NOP_,
  796.          MLA_,MLA_,MLA_,MLA_,MLA_,MLA_,MLA_,TER_},
  797.  
  798. er11 []={DA0 ,DA0 ,DA0 ,DA0 ,DA0 ,DA0 ,DA0 ,ER0 ,DA0 ,DA0 ,DA0 ,DA0 ,DA0 ,DA0 ,
  799.          DA0 ,DA0 ,DA0 ,DA0 ,CR0 ,DA0 ,DA0 ,DA0 },/*er1*/
  800. er11a[]={LPR_,LPR_,LPR_,ERX_,LPR_,LPR_,LPR_,GET_,LPR_,LPR_,LPR_,LPR_,LPR_,LPR_,
  801.          LPR_,LPR_,LPR_,LPR_,NOP_,LPR_,LPR_,LPR_},
  802.  
  803. cr11 []={DA0 ,DA0 ,DA0 ,DA0 ,DA0 ,DA0 ,DA0 ,CR0 ,DA0 ,DA0 ,DA0 ,DA0 ,DA0 ,DA0 ,
  804.          DA0 ,DA0 ,DA0 ,DA0 ,DA0 ,DA0 ,DA0 ,DA0 },/*cr1*/
  805. cr11a[]={LP2_,CRN_,LP2_,CRA_,LP2_,LP2_,LP2_,GET_,LP2_,LP2_,LP2_,LP2_,LP2_,LP2_,
  806.          LP2_,LP2_,LP2_,LP2_,LP2_,LP2_,LP2_,LP2_},
  807.  
  808. *litrtab[] = {da11, da11a, er11, er11a, cr11, cr11a};
  809. struct parse pcblitr = {(UNCH *)"LITR", lexlms, litrtab, 0, 0, 0, 0};
  810. #undef DA0
  811. #undef ER0
  812. #undef CR0
  813. /******************************************************************************/
  814. /* PCBLITV: Literal parse; no references; RS ignored; RE/SPACE sequences
  815.             become single SPACE.  Only minimum data characters allowed.
  816. */
  817. /* Symbols for state names (end with a number). */
  818. #define LS0     0   /* Leading SPACE or RE found. */
  819. #define VA0     2   /* Valid character found. */
  820. #define SP0     4   /* SPACE/RE sequence begun. */
  821.  
  822. static UNCH
  823. /*       free num  min  nms  spc  non  ee   eob  rs   re   sep  cde  nsc  ero
  824.          mdo  msc  mso  pero rni  tagc tago litc */
  825. ls10 []={VA0 ,VA0 ,VA0 ,VA0 ,LS0 ,VA0 ,LS0 ,LS0 ,LS0 ,LS0 ,LS0 ,VA0 ,VA0 ,VA0 ,
  826.          VA0 ,VA0 ,VA0 ,VA0 ,VA0 ,VA0 ,VA0 ,LS0 },/*ls0*/
  827. ls10a[]={MLE_,MLA_,MLA_,MLA_,NOP_,SYS_,EOF_,GET_,RS_ ,NOP_,MLE_,SYS_,MLE_,MLE_,
  828.          MLE_,MLE_,MLE_,MLE_,MLE_,MLE_,MLE_,TER_},
  829. va10 []={VA0 ,VA0 ,VA0 ,VA0 ,SP0 ,VA0 ,VA0 ,VA0 ,VA0 ,SP0 ,SP0 ,VA0 ,VA0 ,VA0 ,
  830.          VA0 ,VA0 ,VA0 ,VA0 ,VA0 ,VA0 ,VA0 ,LS0 },/*va0*/
  831. da10a[]={MLE_,MLA_,MLA_,MLA_,MLA_,SYS_,EOF_,GET_,RS_ ,FUN_,MLE_,SYS_,MLE_,MLE_,
  832.          MLE_,MLE_,MLE_,MLE_,MLE_,MLE_,MLE_,TER_},
  833. sp10 []={VA0 ,VA0 ,VA0 ,VA0 ,SP0 ,VA0 ,VA0 ,SP0 ,SP0 ,SP0 ,SP0 ,VA0 ,VA0 ,VA0 ,
  834.          VA0 ,VA0 ,VA0 ,VA0 ,VA0 ,VA0 ,VA0 ,LS0 },/*sp0*/
  835. sp10a[]={MLE_,MLA_,MLA_,MLA_,NOP_,SYS_,EOF_,GET_,RS_ ,NOP_,MLE_,SYS_,MLE_,MLE_,
  836.          MLE_,MLE_,MLE_,MLE_,MLE_,MLE_,MLE_,RPR_},
  837.  
  838. *litvtab[] = {ls10, ls10a, va10, da10a, sp10, sp10a};
  839. struct parse pcblitv = {(UNCH *)"LITV", lexlms, litvtab, 0, 0, 0, 0};
  840. #undef LS0
  841. #undef VA0
  842. #undef SP0
  843. /******************************************************************************/
  844. /* PCBMD: State and action table for markup declaration tokenization.
  845.           Columns are based on LEXMARK.C.
  846. */
  847. /* Symbols for state names (end with a number). */
  848. #define SP1     0   /* Separator before token expected. */
  849. #define TK1     2   /* Token expected. */
  850. #define CM0     4   /* COM[1] found when sep expected: possible comment, MGRP.*/
  851. #define CM1     6   /* COM[1] found: possible comment, MGRP, or minus.*/
  852. #define CM2     8   /* COM[2] found; in comment. */
  853. #define CM3    10   /* Ending COM[1] found; end comment or continue it. */
  854. #define PR1    12   /* PERO found when token was expected. */
  855. #define PX1    14   /* PLUS found: PGRP or error. */
  856. #define RN1    16   /* RNI found; possible reserved name start. */
  857.  
  858. int pcbmdtk = TK1;            /* PCBMD: token expected. */
  859.  
  860. static UNCH
  861. /*       bit  nmc  num  nms  spc  non  ee   eob  rs   com  eti  grpo lit  lita
  862.          dso  pero plus refc rni  tagc tago vi    */
  863. sp21 []={SP1 ,SP1 ,SP1 ,SP1 ,TK1 ,SP1 ,SP1 ,SP1 ,TK1 ,CM0 ,SP1 ,TK1 ,TK1 ,TK1 ,
  864.          TK1 ,PR1 ,PX1 ,SP1 ,RN1 ,SP1 ,SP1 ,SP1 },
  865. sp21a[]={INV_,LEN_,LEN_,LEN_,NOP_,SYS_,EE_ ,GET_,RS_ ,NOP_,INV_,GRPS,LIT ,LITE,
  866.          MDS ,NOP_,NOP_,INV_,NOP_,EMD ,INV_,INV_},
  867.  
  868. tk21 []={SP1 ,SP1 ,SP1 ,SP1 ,TK1 ,TK1 ,SP1 ,TK1 ,TK1 ,CM1 ,SP1 ,TK1 ,TK1 ,TK1 ,
  869.          TK1 ,PR1 ,PX1 ,SP1 ,RN1 ,SP1 ,SP1 ,SP1 },
  870. tk21a[]={INV_,NMT ,NUM ,NAS ,NOP_,SYS_,EE_ ,GET_,RS_ ,NOP_,INV_,GRPS,LIT ,LITE,
  871.          MDS ,NOP_,NOP_,INV_,NOP_,EMD ,INV_,INV_},
  872.  
  873. /*       bit  nmc  num  nms  spc  non  ee   eob  rs   com  eti  grpo lit  lita
  874.          dso  pero plus refc rni  tagc tago vi    */
  875. cm20 []={SP1 ,SP1 ,SP1 ,SP1 ,SP1 ,CM0 ,SP1 ,CM0 ,SP1 ,CM2 ,SP1 ,SP1 ,SP1 ,SP1 ,
  876.          SP1 ,SP1 ,SP1 ,SP1 ,SP1 ,SP1 ,SP1 ,SP1 },
  877. cm20a[]={LNR_,LNR_,LNR_,LNR_,LNR_,SYS_,LNR_,GET_,LNR_,NOP_,LNR_,LNR_,LNR_,LNR_,
  878.          LNR_,LNR_,LNR_,LNR_,LNR_,LNR_,LNR_,LNR_},
  879.  
  880. cm21 []={TK1 ,TK1 ,TK1 ,TK1 ,TK1 ,CM1 ,TK1 ,CM1 ,TK1 ,CM2 ,TK1 ,TK1 ,TK1 ,TK1 ,
  881.          TK1 ,TK1 ,TK1 ,TK1 ,TK1 ,TK1 ,TK1 ,TK1 },
  882. cm21a[]={CDR ,CDR ,CDR ,CDR ,CDR ,SYS_,CDR ,GET_,CDR ,NOP_,CDR ,MGRP,CDR ,CDR ,
  883.          CDR ,CDR ,CDR ,CDR ,CDR ,CDR ,CDR ,CDR },
  884.  
  885. cm22 []={CM2 ,CM2 ,CM2 ,CM2 ,CM2 ,CM2 ,TK1 ,CM2 ,CM2 ,CM3 ,CM2 ,CM2 ,CM2 ,CM2 ,
  886.          CM2 ,CM2 ,CM2 ,CM2 ,CM2 ,CM2 ,CM2 ,CM2 },
  887. cm22a[]={NOP_,NOP_,NOP_,NOP_,NOP_,SYS_,EOF_,GET_,RS_ ,NOP_,NOP_,NOP_,NOP_,NOP_,
  888.          NOP_,NOP_,NOP_,NOP_,NOP_,NOP_,NOP_,NOP_},
  889.  
  890. /*       bit  nmc  num  nms  spc  non  ee   eob  rs   com  eti  grpo lit  lita
  891.          dso  pero plus refc rni  tagc tago vi    */
  892. cm23 []={CM2 ,CM2 ,CM2 ,CM2 ,CM2 ,CM3 ,TK1 ,CM3 ,CM2 ,TK1 ,CM2 ,CM2 ,CM2 ,CM2 ,
  893.          CM2 ,CM2 ,CM2 ,CM2 ,CM2 ,CM2 ,CM2 ,CM2 },
  894. cm23a[]={NOP_,NOP_,NOP_,NOP_,NOP_,SYS_,EOF_,GET_,RS_ ,NOP_,NOP_,NOP_,NOP_,NOP_,
  895.          NOP_,NOP_,NOP_,NOP_,NOP_,NOP_,NOP_,NOP_},
  896.  
  897. pr21 []={SP1 ,SP1 ,SP1 ,TK1 ,TK1 ,PR1 ,SP1 ,PR1 ,TK1 ,SP1 ,SP1 ,SP1 ,SP1 ,SP1 ,
  898.          SP1 ,SP1 ,SP1 ,SP1 ,TK1 ,SP1 ,SP1 ,SP1 },
  899. pr21a[]={PCI_,PCI_,PCI_,PER_,PEN ,SYS_,PCI_,GET_,PEN ,PCI_,PCI_,PCI_,PCI_,PCI_,
  900.          PCI_,PCI_,PCI_,PCI_,PCI_,PCI_,PCI_,PCI_},
  901.  
  902. px21 []={SP1 ,SP1 ,SP1 ,SP1 ,SP1 ,PX1 ,SP1 ,PX1 ,SP1 ,SP1 ,SP1 ,TK1 ,SP1 ,SP1 ,
  903.          SP1 ,SP1 ,SP1 ,SP1 ,SP1 ,SP1 ,SP1 ,SP1 },
  904. px21a[]={PCI_,PCI_,PCI_,PCI_,PCI_,SYS_,PCI_,GET_,PCI_,PCI_,PCI_,PGRP,PCI_,PCI_,
  905.          PCI_,PCI_,PCI_,PCI_,PCI_,PCI_,PCI_,PCI_},
  906.  
  907. rn21 []={TK1 ,TK1 ,TK1 ,SP1 ,TK1 ,RN1 ,TK1 ,RN1 ,TK1 ,TK1 ,TK1 ,TK1 ,TK1 ,TK1 ,
  908.          TK1 ,TK1 ,TK1 ,TK1 ,TK1 ,TK1 ,TK1 ,TK1 },
  909. rn21a[]={PCI_,PCI_,PCI_,RNS ,PCI_,SYS_,PCI_,GET_,PCI_,PCI_,PCI_,PCI_,PCI_,PCI_,
  910.          PCI_,PCI_,PCI_,PCI_,PCI_,PCI_,PCI_,PCI_},
  911.  
  912. *mdtab[] = {sp21, sp21a, tk21, tk21a, cm20, cm20a, cm21, cm21a, cm22, cm22a,
  913.             cm23, cm23a, pr21, pr21a, px21, px21a, rn21, rn21a};
  914. struct parse pcbmd = {(UNCH *)"MD", lexmark, mdtab, 0, 0, 0, 0};
  915. #undef SP1
  916. #undef TK1
  917. #undef CM0
  918. #undef CM1
  919. #undef CM2
  920. #undef CM3
  921. #undef PR1
  922. #undef PX1
  923. #undef RN1
  924. /******************************************************************************/
  925. /* PCBMDC: State and action table for comment declaration.
  926. */
  927. /* Symbols for state names (end with a number). */
  928. #define CD2     0   /* COM[2] found; in comment. */
  929. #define CD3     2   /* Ending COM[1] found; end comment or continue it. */
  930. #define EM1     4   /* Ending COM[2] found; start new comment or end. */
  931. #define CD1     6   /* COM[1] found; new comment or error. */
  932.  
  933. static UNCH
  934. /*      bit  nmc  num  nms  spc  non  ee   eob  rs   com  eti  grpo lit  lita
  935.         dso  pero plus refc rni  tagc tago vi    */
  936. cd22 []={CD2 ,CD2 ,CD2 ,CD2 ,CD2 ,CD2 ,CD2 ,CD2 ,CD2 ,CD3 ,CD2 ,CD2 ,CD2 ,CD2 ,
  937.          CD2 ,CD2 ,CD2 ,CD2 ,CD2 ,CD2 ,CD2 ,CD2 },
  938. cd22a[]={NOP_,NOP_,NOP_,NOP_,NOP_,SYS_,EOF_,GET_,RS_ ,NOP_,NOP_,NOP_,NOP_,NOP_,
  939.          NOP_,NOP_,NOP_,NOP_,NOP_,NOP_,NOP_,NOP_},
  940.  
  941. cd23 []={CD2 ,CD2 ,CD2 ,CD2 ,CD2 ,CD3 ,CD2 ,CD3 ,CD2 ,EM1 ,CD2 ,CD2 ,CD2 ,CD2 ,
  942.          CD2 ,CD2 ,CD2 ,CD2 ,CD2 ,CD2 ,CD2 ,CD2 },
  943. cd23a[]={NOP_,NOP_,NOP_,NOP_,NOP_,SYS_,EOF_,GET_,RS_ ,NOP_,NOP_,NOP_,NOP_,NOP_,
  944.          NOP_,NOP_,NOP_,NOP_,NOP_,NOP_,NOP_,NOP_},
  945.  
  946. em21 []={CD2 ,CD2 ,CD2 ,CD2 ,EM1 ,EM1 ,CD2 ,EM1 ,EM1 ,CD1 ,CD2 ,CD2 ,CD2 ,CD2 ,
  947.          CD2 ,CD2 ,CD2 ,CD2 ,CD2 ,CD2 ,CD2 ,CD2 },
  948. em21a[]={INV_,INV_,INV_,INV_,NOP_,SYS_,EOF_,GET_,RS_ ,NOP_,INV_,INV_,INV_,INV_,
  949.          INV_,INV_,INV_,INV_,INV_,EMD ,INV_,INV_},
  950.  
  951. cd21 []={CD2 ,CD2 ,CD2 ,CD2 ,CD2 ,CD1 ,CD2 ,CD1 ,CD2 ,CD2 ,CD2 ,CD2 ,CD2 ,CD2 ,
  952.          CD2 ,CD2 ,CD2 ,CD2 ,CD2 ,CD2 ,CD2 ,CD2 },
  953. cd21a[]={PCI_,PCI_,PCI_,PCI_,PCI_,SYS_,EOF_,GET_,PCI_,NOP_,PCI_,PCI_,PCI_,PCI_,
  954.          PCI_,PCI_,PCI_,PCI_,PCI_,PCI_,PCI_,PCI_},
  955.  
  956. *mdctab[] = {cd22, cd22a, cd23, cd23a, em21, em21a, cd21, cd21a};
  957. struct parse pcbmdc = {(UNCH *)"MDC", lexmark, mdctab, 0, 0, 0, 0};
  958. #undef CD2
  959. #undef CD3
  960. #undef EM1
  961. #undef CD1
  962. /******************************************************************************/
  963. /* PCBMDI: State and action table for ignoring markup declarations.
  964.            Literals are handled properly so a TAGC won't end the declaration.
  965.            An error is noted if the entity ends within a declaration that
  966.            is being ignored.
  967.            TO DO: Handle nested declaration sets.
  968. */
  969. /* Symbols for state names (end with a number). */
  970. #define NC1     0   /* Not in a comment; TAGC ends declaration. */
  971. #define IC1     2   /* COM[1] found; possible comment. */
  972. #define IC2     4   /* COM[2] found; in comment. */
  973. #define IC3     6   /* Ending COM[1] found; end comment or continue it. */
  974. #define LI1     8   /* Literal parameter; search for LIT. */
  975. #define LA1    10   /* Literal parameter; search for LITA. */
  976.  
  977. static UNCH
  978. /*       bit  nmc  num  nms  spc  non  ee   eob  rs   com  eti  grpo lit  lita
  979.          dso  pero plus refc rni  tagc tago vi    */
  980. nc21 []={NC1 ,NC1 ,NC1 ,NC1 ,NC1 ,NC1 ,NC1 ,NC1 ,NC1 ,IC1 ,NC1 ,NC1 ,LI1 ,LA1 ,
  981.          NC1 ,NC1 ,NC1 ,NC1 ,NC1 ,NC1 ,NC1 ,NC1 },
  982. nc21a[]={NOP_,NOP_,NOP_,NOP_,NOP_,SYS_,EOF_,GET_,RS_ ,NOP_,NOP_,NOP_,NOP_,NOP_,
  983.          NOP_,NOP_,NOP_,NOP_,NOP_,EMD ,NOP_,NOP_},
  984.  
  985. ic21 []={NC1 ,NC1 ,NC1 ,NC1 ,NC1 ,IC1 ,NC1 ,IC1 ,NC1 ,IC2 ,NC1 ,NC1 ,LI1 ,LA1 ,
  986.          NC1 ,NC1 ,NC1 ,NC1 ,NC1 ,NC1 ,NC1 ,NC1 },
  987. ic21a[]={NOP_,NOP_,NOP_,NOP_,NOP_,SYS_,EOF_,GET_,RS_ ,NOP_,NOP_,NOP_,NOP_,NOP_,
  988.          NOP_,NOP_,NOP_,NOP_,NOP_,EMD ,NOP_,NOP_},
  989.  
  990. ic22 []={IC2 ,IC2 ,IC2 ,IC2 ,IC2 ,IC2 ,NC1 ,IC2 ,IC2 ,IC3 ,IC2 ,IC2 ,IC2 ,IC2 ,
  991.          IC2 ,IC2 ,IC2 ,IC2 ,IC2 ,IC2 ,IC2 ,IC2 },
  992. ic22a[]={NOP_,NOP_,NOP_,NOP_,NOP_,SYS_,EOF_,GET_,RS_ ,NOP_,NOP_,NOP_,NOP_,NOP_,
  993.          NOP_,NOP_,NOP_,NOP_,NOP_,NOP_,NOP_,NOP_},
  994.  
  995. ic23 []={IC2 ,IC2 ,IC2 ,IC2 ,IC2 ,IC3 ,NC1 ,IC3 ,IC2 ,NC1 ,IC2 ,IC2 ,IC2 ,IC2 ,
  996.          IC2 ,IC2 ,IC2 ,IC2 ,IC2 ,IC2 ,IC2 ,IC2 },/*ic3*/
  997. ic23a[]={NOP_,NOP_,NOP_,NOP_,NOP_,SYS_,EOF_,GET_,RS_ ,NOP_,NOP_,NOP_,NOP_,NOP_,
  998.          NOP_,NOP_,NOP_,NOP_,NOP_,NOP_,NOP_,NOP_},
  999.  
  1000. /*       bit  nmc  num  nms  spc  non  ee   eob  rs   com  eti  grpo lit  lita
  1001.          dso  pero plus refc rni  tagc tago vi    */
  1002. li21 []={LI1 ,LI1 ,LI1 ,LI1 ,LI1 ,LI1 ,LI1 ,LI1 ,LI1 ,LI1 ,LI1 ,LI1 ,NC1 ,LI1 ,
  1003.          LI1 ,LI1 ,LI1 ,LI1 ,LI1 ,LI1 ,LI1 ,LI1 },/*li1*/
  1004. li21a[]={NOP_,NOP_,NOP_,NOP_,NOP_,SYS_,EOF_,GET_,RS_ ,NOP_,NOP_,NOP_,NOP_,NOP_,
  1005.          NOP_,NOP_,NOP_,NOP_,NOP_,NOP_,NOP_,NOP_},
  1006.  
  1007. la21 []={LA1 ,LA1 ,LA1 ,LA1 ,LA1 ,LA1 ,LA1 ,LA1 ,LA1 ,LA1 ,LA1 ,LA1 ,LA1 ,NC1 ,
  1008.          LA1 ,LA1 ,LA1 ,LA1 ,LA1 ,LA1 ,LA1 ,LA1 },/*la1*/
  1009. la21a[]={NOP_,NOP_,NOP_,NOP_,NOP_,SYS_,EOF_,GET_,RS_ ,NOP_,NOP_,NOP_,NOP_,NOP_,
  1010.          NOP_,NOP_,NOP_,NOP_,NOP_,NOP_,NOP_,NOP_},
  1011.  
  1012. *mditab[] = {nc21, nc21a, ic21, ic21a, ic22, ic22a,
  1013.              ic23, ic23a, li21, li21a, la21, la21a};
  1014. struct parse pcbmdi = {(UNCH *)"MDI", lexmark, mditab, 0, 0, 0, 0};
  1015. #undef NC1
  1016. #undef IC1
  1017. #undef IC2
  1018. #undef IC3
  1019. #undef LI1
  1020. #undef LA1
  1021. /******************************************************************************/
  1022. /* PCBMSRC: State and action table for marked section in RCDATA mode.
  1023.             Nested marked sections are not recognized; the first MSE ends it.
  1024.             Initial state assumes an MS declaration was processed.
  1025.             Columns are based on LEXLMS.C but LITC column needn't exist.
  1026. */
  1027. /* Symbols for state names (end with a number). */
  1028. #define ET0     0   /* MSS processed or buffer flushed; no data. */
  1029. #define DA0     2   /* Data in buffer. */
  1030. #define ER0     4   /* ERO found; start lookahead buffer. */
  1031. #define CR0     6   /* CRO found (ER0, RNI). */
  1032. #define ME0     8   /* MSC found. */
  1033. #define ME1    10   /* MSC, MSC found. */
  1034.  
  1035. static UNCH
  1036. /*       free nu   min  nms  spc  non  ee   eob  rs   re   sep  cde  nsc  ero
  1037.          mdo  msc  mso  pero rni  tagc tago litc */
  1038. et30 []={DA0 ,DA0 ,DA0 ,DA0 ,DA0 ,ET0 ,ET0 ,ET0 ,ET0 ,ET0 ,DA0 ,DA0 ,DA0 ,ER0 ,
  1039.          DA0 ,ME0 ,DA0 ,DA0 ,DA0 ,DA0 ,DA0 ,DA0 },/*et0*/
  1040. et30a[]={DAS_,DAS_,DAS_,DAS_,DAS_,NON_,EE_ ,GET_,RS_ ,REF_,DAS_,DAS_,DAS_,LAS_,
  1041.          DAS_,LAS_,DAS_,DAS_,DAS_,DAS_,DAS_,DAS_},
  1042.  
  1043. da30 []={DA0 ,DA0 ,DA0 ,DA0 ,DA0 ,ET0 ,ET0 ,ET0 ,ET0 ,ET0 ,DA0 ,DA0 ,DA0 ,ET0 ,
  1044.          DA0 ,ET0 ,DA0 ,DA0 ,DA0 ,DA0 ,DA0 ,DA0 },/*da0*/
  1045. da30a[]={NOP_,NOP_,NOP_,NOP_,NOP_,DAF_,DAF_,DAF_,DAF_,DAF_,NOP_,NOP_,NOP_,DAF_,
  1046.          NOP_,DAF_,NOP_,NOP_,NOP_,NOP_,NOP_,NOP_},
  1047.  
  1048. er30 []={ET0 ,ET0 ,ET0 ,ET0 ,ET0 ,ET0 ,ET0 ,ER0 ,ET0 ,ET0 ,ET0 ,ET0 ,ET0 ,ET0 ,
  1049.          ET0 ,ET0 ,ET0 ,ET0 ,CR0 ,ET0 ,ET0 ,ET0 },/*er0*/
  1050. er30a[]={LAF_,LAF_,LAF_,ERX_,LAF_,LAF_,LAF_,GET_,LAF_,LAF_,LAF_,LAF_,LAF_,LAF_,
  1051.          LAF_,LAF_,LAF_,LAF_,LAM_,LAF_,LAF_,LAF_},
  1052.  
  1053. /*       free nu   min  nms  spc  non  ee   eob  rs   re   sep  cde  nsc  ero
  1054.          mdo  msc  mso  pero rni  tagc tago litc */
  1055. cr30 []={ET0 ,ET0 ,ET0 ,ET0 ,ET0 ,ET0 ,ET0 ,CR0 ,ET0 ,ET0 ,ET0 ,ET0 ,ET0 ,ET0 ,
  1056.          ET0 ,ET0 ,ET0 ,ET0 ,ET0 ,ET0 ,ET0 ,ET0 },/*cr0*/
  1057. cr30a[]={LAF_,CRN_,LAF_,CRA_,LAF_,LAF_,LAF_,GET_,LAF_,LAF_,LAF_,LAF_,LAF_,LAF_,
  1058.          LAF_,LAF_,LAF_,LAF_,LAF_,LAF_,LAF_,LAF_},
  1059.  
  1060. me30 []={ET0, ET0, ET0, ET0, ET0 ,ET0, ET0, ME0, ET0 ,ET0 ,ET0 ,ET0, ET0 ,ET0 ,
  1061.          ET0, ME1, ET0 ,ET0, ET0 ,ET0, ET0 ,ET0 },/*me0*/
  1062. me30a[]={LAF_,LAF_,LAF_,LAF_,LAF_,LAF_,LAF_,GET_,LAF_,LAF_,LAF_,LAF_,LAF_,LAF_,
  1063.          LAF_,LAM_,LAF_,LAF_,LAF_,LAF_,LAF_,LAF_},
  1064.  
  1065. me31 []={ET0, ET0, ET0, ET0, ET0 ,ET0, ET0, ME1, ET0 ,ET0 ,ET0 ,ET0, ET0 ,ET0 ,
  1066.          ET0, ET0, ET0 ,ET0, ET0 ,ET0, ET0 ,ET0,},/*me1*/
  1067. me31a[]={LAF_,LAF_,LAF_,LAF_,LAF_,LAF_,LAF_,GET_,LAF_,LAF_,LAF_,LAF_,LAF_,LAF_,
  1068.          LAF_,LAF_,LAF_,LAF_,LAF_,MSE_,LAF_,LAF_},
  1069.  
  1070. *msrctab[]={et30, et30a, da30, da30a, er30, er30a,
  1071.             cr30, cr30a, me30, me30a, me31, me31a};
  1072. struct parse pcbmsrc = {(UNCH *)"MSRCDATA", lexlms, msrctab, 0, 0, 0, 0};
  1073. #undef ET0
  1074. #undef DA0
  1075. #undef ER0
  1076. #undef CR0
  1077. #undef ME0
  1078. #undef ME1
  1079. /******************************************************************************/
  1080. /* PCBMSC: State and action table for marked section in CDATA mode.
  1081.            Nested marked sections are not recognized; the first MSE ends it.
  1082.            Initial state assumes an MS declaration was processed.
  1083. */
  1084. /* Symbols for state names (end with a number). */
  1085. #define ET2     0   /* MSS processed or buffer flushed; no data. */
  1086. #define DA2     2   /* Data in buffer. */
  1087. #define ME2     4   /* MSC found. */
  1088. #define ME3     6   /* MSC, MSC found. */
  1089.  
  1090. static UNCH
  1091. /*       free nu   min  nms  spc  non  ee   eob  rs   re   sep  cde  nsc  ero
  1092.          mdo  msc  mso  pero rni  tagc tago litc */
  1093. et32 []={DA2 ,DA2 ,DA2 ,DA2 ,DA2 ,ET2 ,ET2 ,ET2 ,ET2 ,ET2 ,DA2 ,DA2 ,DA2 ,DA2 ,
  1094.          DA2 ,ME2 ,DA2 ,DA2 ,DA2 ,DA2 ,DA2 ,DA2 },/*et2*/
  1095. et32a[]={DAS_,DAS_,DAS_,DAS_,DAS_,NON_,EOF_,GET_,RS_ ,REF_,DAS_,DAS_,DAS_,DAS_,
  1096.          DAS_,DAS_,DAS_,DAS_,DAS_,DAS_,DAS_,DAS_},
  1097.  
  1098. da32 []={DA2 ,DA2 ,DA2 ,DA2 ,DA2 ,ET2 ,ET2 ,ET2 ,ET2 ,ET2 ,DA2 ,DA2 ,DA2 ,DA2 ,
  1099.          DA2 ,ET2 ,DA2 ,DA2 ,DA2 ,DA2 ,DA2 ,DA2 },/*da2*/
  1100. da32a[]={NOP_,NOP_,NOP_,NOP_,NOP_,DAF_,DAF_,DAF_,DAF_,DAF_,NOP_,NOP_,NOP_,NOP_,
  1101.          NOP_,DAF_,NOP_,NOP_,NOP_,NOP_,NOP_,NOP_},
  1102.  
  1103. me32 []={ET2, ET2, ET2, ET2, ET2 ,ET2, ET2, ME2, ET2 ,ET2 ,ET2 ,ET2, ET2 ,ET2 ,
  1104.          ET2, ME3, ET2 ,ET2, ET2 ,ET2, ET2, ET2,},/*me2*/
  1105. me32a[]={LAF_,LAF_,LAF_,LAF_,LAF_,LAF_,LAF_,GET_,LAF_,LAF_,LAF_,LAF_,LAF_,LAF_,
  1106.          LAF_,LAM_,LAF_,LAF_,LAF_,LAF_,LAF_,LAF_},
  1107.  
  1108. me33 []={ET2, ET2, ET2, ET2, ET2 ,ET2, ET2, ME3, ET2 ,ET2 ,ET2 ,ET2, ET2 ,ET2 ,
  1109.          ET2, ET2, ET2 ,ET2, ET2 ,ET2, ET2, ET2,},/*me3*/
  1110. me33a[]={LAF_,LAF_,LAF_,LAF_,LAF_,LAF_,LAF_,GET_,LAF_,LAF_,LAF_,LAF_,LAF_,LAF_,
  1111.          LAF_,LAF_,LAF_,LAF_,LAF_,MSE_,LAF_,LAF_},
  1112.  
  1113. *msctab[]={et32, et32a, da32, da32a, me32, me32a, me33, me33a};
  1114. struct parse pcbmsc = {(UNCH *)"MSCDATA", lexlms, msctab, 0, 0, 0, 0};
  1115. #undef ET2
  1116. #undef DA2
  1117. #undef ME2
  1118. #undef ME3
  1119. /******************************************************************************/
  1120. /* PCBMSI: State and action table for marked section in IGNORE mode.
  1121.            Nested marked sections are recognized; the matching MSE ends it.
  1122.            Initial state assumes an MS declaration, MSS, or MSE was processed.
  1123. */
  1124. /* Symbols for state names (end with a number). */
  1125. #define ET4     0   /* Markup found or buffer flushed; no data. */
  1126. #define ME4     2   /* MSC found. */
  1127. #define ME5     4   /* MSC, MSC found. */
  1128. #define ES4     6   /* TAGO found. */
  1129. #define MD4     8   /* MDO found (TAGO, MDO[2]). */
  1130.  
  1131. static UNCH
  1132. /*       free nu   min  nms  spc  non  ee   eob  rs   re   sep  cde  nsc  ero
  1133.          mdo  msc  mso  pero rni  tagc tago litc refc */
  1134. et34 []={ET4 ,ET4 ,ET4 ,ET4 ,ET4 ,ET4 ,ET4 ,ET4 ,ET4 ,ET4 ,ET4 ,ET4 ,ET4 ,ET4 ,
  1135.          ET4 ,ME4 ,ET4 ,ET4 ,ET4 ,ET4 ,ES4 ,ET4 ,ET4 },/*et4*/
  1136. et34a[]={NOP_,NOP_,NOP_,NOP_,NOP_,SYS_,EOF_,GET_,RS_ ,NOP_,NOP_,NOP_,NOP_,NOP_,
  1137.          NOP_,NOP_,NOP_,NOP_,NOP_,NOP_,NOP_,NOP_,NOP_},
  1138.  
  1139. me34 []={ET4, ET4, ET4, ET4, ET4 ,ET4, ET4, ME4, ET4 ,ET4 ,ET4 ,ET4, ET4, ET4 ,
  1140.          ET4, ME5 ,ET4, ET4, ET4 ,ET4, ET4, ET4, ET4,},/*me4*/
  1141. me34a[]={NOP_,NOP_,NOP_,NOP_,NOP_,SYS_,EOF_,GET_,RS_ ,NOP_,NOP_,NOP_,NOP_,NOP_,
  1142.          NOP_,NOP_,NOP_,NOP_,NOP_,NOP_,NOP_,NOP_,NOP_},
  1143.  
  1144. me35 []={ET4, ET4, ET4, ET4, ET4 ,ET4, ET4, ME5, ET4 ,ET4 ,ET4 ,ET4, ET4, ET4 ,
  1145.          ET4, ET4 ,ET4, ET4, ET4 ,ET4, ET4, ET4, ET4,},/*me5*/
  1146. me35a[]={NOP_,NOP_,NOP_,NOP_,NOP_,SYS_,EOF_,GET_,RS_ ,NOP_,NOP_,NOP_,NOP_,NOP_,
  1147.          NOP_,NOP_,NOP_,NOP_,NOP_,MSE_,NOP_,NOP_,NOP_},
  1148.  
  1149. /*       free nu   min  nms  spc  non  ee   eob  rs   re   sep  cde  nsc  ero
  1150.          mdo  msc  mso  pero rni  tagc tago litc */
  1151. es34 []={ET4 ,ET4 ,ET4 ,ET4 ,ET4 ,ES4 ,ET4 ,ES4 ,ET4 ,ET4 ,ET4 ,ET4 ,ET4 ,ET4 ,
  1152.          MD4 ,ET4 ,ET4 ,ET4 ,ET4 ,ET4 ,ET4 ,ET4 },/*es4*/
  1153. es34a[]={NOP_,NOP_,NOP_,NOP_,NOP_,SYS_,EOF_,GET_,RS_ ,NOP_,NOP_,NOP_,NOP_,NOP_,
  1154.          NOP_,NOP_,NOP_,NOP_,NOP_,NOP_,NOP_,NOP_},
  1155.  
  1156. md34 []={ET4, ET4, ET4, ET4, ET4 ,MD4, ET4, MD4, ET4 ,ET4 ,ET4 ,ET4, ET4, ET4 ,
  1157.          ET4, ET4 ,ET4, ET4, ET4 ,ET4, ET4, ET4,},/*md4*/
  1158. md34a[]={NOP_,NOP_,NOP_,NOP_,NOP_,SYS_,EOF_,GET_,RS_ ,NOP_,NOP_,NOP_,NOP_,NOP_,
  1159.          NOP_,NOP_,MSS_,NOP_,NOP_,NOP_,NOP_,NOP_},
  1160.  
  1161. *msitab[]={et34, et34a, me34, me34a, me35, me35a, es34, es34a, md34, md34a};
  1162. struct parse pcbmsi = {(UNCH *)"MSIGNORE", lexlms, msitab, 0, 0, 0, 0};
  1163. #undef ET4
  1164. #undef ME4
  1165. #undef ME5
  1166. #undef ES4
  1167. #undef MD4
  1168. /******************************************************************************/
  1169. /* PCBSTAG: State and action table for start-tag parse.
  1170.             Columns are based on LEXMARK.C.
  1171. */
  1172. /* Symbols for state names (end with a number). */
  1173. #define SP1     0   /* Separator before name expected. */
  1174. #define AN1     2   /* Attribute name expected. */
  1175. #define SP2     4   /* Separator or value indicator expected. */
  1176. #define VI1     6   /* Value indicator expected. */
  1177. #define AV1     8   /* Attribute value expected. */
  1178.  
  1179. int pcbstan = AN1;            /* PCBSTAG: attribute name expected. */
  1180.  
  1181. static UNCH
  1182. /*       bit  nmc  num  nms  spc  non  ee   eob  rs   com  eti  grpo lit  lita
  1183.          dso  pero plus refc rni  tagc tago vi    */
  1184. sp41 []={SP1 ,SP1 ,SP1 ,SP1 ,AN1 ,SP1 ,SP1 ,SP1 ,AN1 ,SP1 ,SP1 ,SP1 ,SP1 ,SP1 ,
  1185.          SP1 ,SP1 ,SP1 ,SP1 ,SP1 ,SP1 ,SP1 ,SP1 },
  1186. sp41a[]={INV_,LEN_,LEN_,LEN_,NOP_,SYS_,EOF_,GET_,RS_ ,INV_,ETIC,INV_,INV_,INV_,
  1187.          INV_,INV_,INV_,INV_,INV_,TAGC,TAGO,INV_},
  1188.  
  1189. an41 []={SP1 ,SP1 ,SP1 ,SP2 ,AN1 ,AN1 ,AN1 ,AN1 ,AN1 ,SP1 ,SP1 ,SP1 ,SP1 ,SP1 ,
  1190.          SP1 ,SP1 ,SP1 ,SP1 ,SP1 ,SP1 ,SP1 ,SP1 },
  1191. an41a[]={INV_,NTV ,NTV ,NVS ,NOP_,SYS_,EOF_,GET_,RS_ ,INV_,ETIC,INV_,INV_,INV_,
  1192.          INV_,INV_,INV_,INV_,INV_,TAGC,TAGO,INV_},
  1193.  
  1194. sp42 []={SP1 ,SP1 ,SP1 ,SP1 ,VI1 ,SP2 ,SP2 ,SP2 ,VI1 ,SP1 ,SP1 ,SP1 ,SP1 ,SP1 ,
  1195.          SP1 ,SP1 ,SP1 ,SP1 ,SP1 ,SP1 ,SP1 ,AV1 },
  1196. sp42a[]={INV_,LEN_,LEN_,LEN_,NOP_,SYS_,EOF_,GET_,RS_ ,INV_,NASV,INV_,INV_,INV_,
  1197.          INV_,INV_,INV_,INV_,INV_,NASV,NASV,NOP_},
  1198.  
  1199. /*       bit  nmc  num  nms  spc  non  ee   eob  rs   com  eti  grpo lit  lita
  1200.          dso  pero plus refc rni  tagc tago vi    */
  1201. vi41 []={SP1 ,AN1 ,AN1 ,AN1 ,VI1 ,VI1 ,VI1 ,VI1 ,VI1 ,SP1 ,SP1 ,SP1 ,SP1 ,SP1 ,
  1202.          SP1 ,SP1 ,SP1 ,SP1 ,SP1 ,SP1 ,SP1 ,AV1 },
  1203. vi41a[]={INV_,NASV,NASV,NASV,NOP_,SYS_,EOF_,GET_,RS_ ,INV_,NASV,INV_,INV_,INV_,
  1204.          INV_,INV_,INV_,INV_,INV_,NASV,NASV,NOP_},
  1205.  
  1206. av41 []={SP1 ,SP1 ,SP1 ,SP1 ,AV1 ,AV1 ,AV1 ,AV1 ,AV1 ,SP1 ,SP1 ,SP1 ,AN1 ,AN1 ,
  1207.          SP1 ,SP1 ,SP1 ,SP1 ,SP1 ,SP1 ,SP1 ,SP1 },
  1208. av41a[]={INV_,AVU ,AVU ,AVU ,NOP_,SYS_,EOF_,GET_,RS_ ,INV_,INV_,INV_,AVD ,AVDA,
  1209.          INV_,INV_,INV_,INV_,INV_,INV_,INV_,INV_},
  1210.  
  1211. *stagtab[] = {sp41, sp41a, an41, an41a, sp42, sp42a, vi41, vi41a, av41, av41a};
  1212. struct parse pcbstag = {(UNCH *)"STAG", lexmark, stagtab, 0, 0, 0, 0};
  1213. #undef SP1
  1214. #undef AN1
  1215. #undef SP2
  1216. #undef VI1
  1217. #undef AV1
  1218. /******************************************************************************/
  1219. /* PCBETAG: State and action table for end-tag parse.
  1220. */
  1221. #define TC1     0   /* Tag close expected (no attributes allowed). */
  1222.  
  1223. static UNCH
  1224. /*       bit  nmc  nu   nms  spc  non  ee   eob  rs   com  eti  grpo lit  lita
  1225.          dso  pero plus refc rni  tagc tago vi    */
  1226. tc41 []={TC1 ,TC1 ,TC1 ,TC1 ,TC1 ,TC1 ,TC1 ,TC1 ,TC1 ,TC1 ,TC1 ,TC1 ,TC1 ,TC1 ,
  1227.          TC1 ,TC1 ,TC1 ,TC1 ,TC1 ,TC1 ,TC1 ,TC1 },/*tc1*/
  1228. tc41a[]={INV_,INV_,INV_,INV_,NOP_,SYS_,EOF_,GET_,RS_ ,INV_,INV_,INV_,INV_,INV_,
  1229.          INV_,INV_,INV_,INV_,INV_,TAGC,TAGO,INV_},
  1230.  
  1231. *etagtab[] = {tc41, tc41a};
  1232. struct parse pcbetag = {(UNCH *)"ETAG", lexmark, etagtab, 0, 0, 0, 0};
  1233. #undef TC1
  1234. /******************************************************************************/
  1235. /* PCBVAL: State and action table for tokenizing attribute values.
  1236.            Columns are based on LEXTOKE.C (but EOB cannot occur).
  1237. */
  1238. /* Symbols for state names (end with a number). */
  1239. #define TK1     0   /* Token expected. */
  1240. #define SP1     2   /* Separator before token expected. */
  1241.  
  1242. static UNCH
  1243. /*       inv  rec  sep  nmc  nms  nu   eob   */
  1244. tk51 []={TK1 ,TK1 ,TK1 ,SP1 ,SP1 ,SP1 },/*tk1*/
  1245. tk51a[]={_INV,_NOP,_NOP,_NMT,_NAS,_NUM},
  1246.  
  1247. sp51 []={TK1 ,TK1 ,TK1 ,TK1 ,TK1 ,TK1 },/*sp1*/
  1248. sp51a[]={_INV,_NOP,_NOP,_LEN,_LEN,_LEN},
  1249.  
  1250. *valtab[] = {tk51, tk51a, sp51, sp51a};
  1251. struct parse pcbval = {(UNCH *)"VAL", lextoke, valtab, 0, 0, 0, 0};
  1252. #undef TK1
  1253. #undef SP1
  1254. /******************************************************************************/
  1255. /* PCBEAL: State and action table for end of attribute specification list.
  1256.            If delimiter occurs, process it.  Otherwise, put invalid character
  1257.            back for the next parse.
  1258. */
  1259. /* Symbols for state names (end with a number). */
  1260. #define AL0     0   /* Delimiter expected. */
  1261.  
  1262. static UNCH
  1263. /*       bit  nmc  nms  re   spc  non  ee   eob  rs   and  grpc grpo lit  lita
  1264.          dtgc dtgo opt  or   pero plus rep  rni  seq  refc */
  1265. al00 []={AL0 ,AL0 ,AL0 ,AL0 ,AL0 ,AL0 ,AL0 ,AL0 ,AL0 ,AL0 ,AL0 ,AL0 ,AL0 ,AL0 ,
  1266.          AL0 ,AL0 ,AL0 ,AL0 ,AL0 ,AL0 ,AL0 ,AL0 ,AL0 ,AL0 },/*al0*/
  1267. al00a[]={INV_,INV_,INV_,INV_,INV_,SYS_,EE_ ,GET_,INV_,INV_,INV_,INV_,INV_,INV_,
  1268.          GRPE,INV_,INV_,INV_,INV_,INV_,INV_,INV_,INV_,INV_},
  1269.  
  1270. *ealtab[] = {al00, al00a};
  1271. struct parse pcbeal = {(UNCH *)"EAL", lexgrp, ealtab, 0, 0, 0, 0};
  1272. #undef AL0
  1273. /******************************************************************************/
  1274.